diff --git a/decimal.js b/decimal.js index b0697fb..63c7977 100644 --- a/decimal.js +++ b/decimal.js @@ -2114,14 +2114,8 @@ /* - * Returns a new Decimal whose value is the nearest multiple of the magnitude of `y` to the value - * of this Decimal. - * - * If the value of this Decimal is equidistant from two multiples of `y`, the rounding mode `rm`, - * or `Decimal.rounding` if `rm` is omitted, determines the direction of the nearest multiple. - * - * In the context of this method, rounding mode 4 (ROUND_HALF_UP) is the same as rounding mode 0 - * (ROUND_UP), and so on. + * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding + * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal. * * The return value will always have the same sign as this Decimal, unless either this Decimal * or `y` is NaN, in which case the return value will be also be NaN. diff --git a/decimal.mjs b/decimal.mjs index 78f9927..98ac347 100644 --- a/decimal.mjs +++ b/decimal.mjs @@ -2110,16 +2110,9 @@ P.toHexadecimal = P.toHex = function (sd, rm) { }; - /* - * Returns a new Decimal whose value is the nearest multiple of the magnitude of `y` to the value - * of this Decimal. - * - * If the value of this Decimal is equidistant from two multiples of `y`, the rounding mode `rm`, - * or `Decimal.rounding` if `rm` is omitted, determines the direction of the nearest multiple. - * - * In the context of this method, rounding mode 4 (ROUND_HALF_UP) is the same as rounding mode 0 - * (ROUND_UP), and so on. + * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding + * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal. * * The return value will always have the same sign as this Decimal, unless either this Decimal * or `y` is NaN, in which case the return value will be also be NaN. @@ -2148,7 +2141,11 @@ P.toNearest = function (y, rm) { rm = Ctor.rounding; } else { y = new Ctor(y); - if (rm !== void 0) checkInt32(rm, 0, 8); + if (rm === void 0) { + rm = Ctor.rounding; + } else { + checkInt32(rm, 0, 8); + } // If x is not finite, return x if y is not NaN, else NaN. if (!x.d) return y.s ? x : y; @@ -2163,7 +2160,6 @@ P.toNearest = function (y, rm) { // If y is not zero, calculate the nearest multiple of y to x. if (y.d[0]) { external = false; - if (rm < 4) rm = [4, 5, 7, 8][rm]; x = divide(x, y, 0, rm, 1).times(y); external = true; finalise(x); @@ -4329,7 +4325,7 @@ function clone(obj) { Decimal.config = Decimal.set = config; Decimal.clone = clone; - Decimal.isDecimal = isDecimalInstance; + Decimal.isDecimal = isDecimalInstance; Decimal.abs = abs; Decimal.acos = acos; diff --git a/doc/API.html b/doc/API.html index ab44236..ae5f05d 100644 --- a/doc/API.html +++ b/doc/API.html @@ -2045,8 +2045,8 @@ x.toBinary(1) // '0b1p+8'
Throws on an invalid dp
or rm
value.
x = new Decimal(12.34567) -x.toDecimalPlaces(0) // '12' -x.toDecimalPlaces(1, 0) // '12.3' +x.toDecimalPlaces(0) // '12' +x.toDecimalPlaces(1, Decimal.ROUND_UP) // '12.3' y = new Decimal(9876.54321) y.toDP(3) // '9876.543' @@ -2083,15 +2083,15 @@ y.toDP(1, Decimal.ROUND_DOWN) // '9876.5'
x = 45.6 y = new Decimal(x) -x.toExponential() // '4.56e+1' -y.toExponential() // '4.56e+1' -x.toExponential(0) // '5e+1' -y.toExponential(0) // '5e+1' -x.toExponential(1) // '4.6e+1' -y.toExponential(1) // '4.6e+1' -y.toExponential(1, 1) // '4.5e+1' (ROUND_DOWN) -x.toExponential(3) // '4.560e+1' -y.toExponential(3) // '4.560e+1'+x.toExponential() // '4.56e+1' +y.toExponential() // '4.56e+1' +x.toExponential(0) // '5e+1' +y.toExponential(0) // '5e+1' +x.toExponential(1) // '4.6e+1' +y.toExponential(1) // '4.6e+1' +y.toExponential(1, Decimal.ROUND_DOWN) // '4.5e+1' +x.toExponential(3) // '4.560e+1' +y.toExponential(3) // '4.560e+1' @@ -2131,14 +2131,14 @@ y.toExponential(3) // '4.560e+1'
x = 3.456 y = new Decimal(x) -x.toFixed() // '3' -y.toFixed() // '3.456' -y.toFixed(0) // '3' -x.toFixed(2) // '3.46' -y.toFixed(2) // '3.46' -y.toFixed(2, 1) // '3.45' (ROUND_DOWN) -x.toFixed(5) // '3.45600' -y.toFixed(5) // '3.45600'+x.toFixed() // '3' +y.toFixed() // '3.456' +y.toFixed(0) // '3' +x.toFixed(2) // '3.46' +y.toFixed(2) // '3.46' +y.toFixed(2, Decimal.ROUND_DOWN) // '3.45' +x.toFixed(5) // '3.45600' +y.toFixed(5) // '3.45600' @@ -2210,25 +2210,16 @@ x.toHex(1) // '0x1p+8'
.toNearest(n [, rm]) ⇒ Decimal
+ toNearest.toNearest(x [, rm]) ⇒ Decimal
x
: number|string|Decimal
rm
: number: integer, 0
to 8
inclusive
- Returns a new Decimal whose value is the nearest multiple of x
to the value of
- this Decimal.
-
- If the value of this Decimal is equidistant from two multiples of x
, the rounding
- mode rm
, or rounding
if rm
is
- omitted, determines the direction of the nearest.
-
- In this context, rounding mode ROUND_HALF_UP
is
- interpreted the same as rounding mode ROUND_UP
, and so
- on, i.e. the rounding is either up, down, to ceil, to floor or to even.
+ Returns a new Decimal whose value is the nearest multiple of x
in the direction
+ of rounding mode rm
, or rounding
if
+ rm
is omitted, to the value of this Decimal.
The return value will always have the same sign as this Decimal, unless either this Decimal @@ -2241,11 +2232,11 @@ x.toHex(1) // '0x1p+8'
x = new Decimal(1.39) -x.toNearest(0.25) // '1.5' +x.toNearest(0.25) // '1.5' -y = new Decimal(0.75) // equidistant from 0.5 and 1 -y.toNearest(0.5, 0) // '1' (ROUND_UP) -y.toNearest(0.5, 1) // '0.5' (ROUND_DOWN)+y = new Decimal(9.499) +y.toNearest(0.5, Decimal.ROUND_UP) // '9.5' +y.toNearest(0.5, Decimal.ROUND_DOWN) // '9' @@ -2393,8 +2384,8 @@ x.toPrecision() // '45.6' y.toPrecision() // '45.6' x.toPrecision(1) // '5e+1' y.toPrecision(1) // '5e+1' -y.toPrecision(2, 0) // '4.6e+1' (ROUND_UP) -y.toPrecision(2, 1) // '4.5e+1' (ROUND_DOWN) +y.toPrecision(2, Decimal.ROUND_UP) // '4.6e+1' +y.toPrecision(2, Decimal.DOWN) // '4.5e+1' x.toPrecision(5) // '45.600' y.toPrecision(5) // '45.600'