@ -61,7 +61,7 @@ li span{float:right;margin-right:10px;color:#c0c0c0}
< a class = 'nav-title' href = "#" > API< / a >
< a class = 'nav-title' href = "#" > API< / a >
< b > CONSTRUCTOR< / b >
< b > CONSTRUCTOR< / b >
< ul > < li > < a href = "#decimal" > Decimal< / a > < / li > < / ul >
< ul > < li > < a href = "#decimal" > < strong > Decimal< / strong > < / a > < / li > < / ul >
< a href = "#methods" > Methods< / a >
< a href = "#methods" > Methods< / a >
< ul >
< ul >
@ -76,8 +76,7 @@ li span{float:right;margin-right:10px;color:#c0c0c0}
< li > < a href = "#Datan2" > atan2< / a > < / li >
< li > < a href = "#Datan2" > atan2< / a > < / li >
< li > < a href = "#Dcbrt" > cbrt< / a > < / li >
< li > < a href = "#Dcbrt" > cbrt< / a > < / li >
< li > < a href = "#Dceil" > ceil< / a > < / li >
< li > < a href = "#Dceil" > ceil< / a > < / li >
< li > < a href = "#Dclone" > clone< / a > < / li >
< li > < a href = "#Dclone" > < strong > clone< / strong > < / a > < / li >
< li > < a href = "#Dconfig" > config< / a > < / li >
< li > < a href = "#Dcos" > cos< / a > < / li >
< li > < a href = "#Dcos" > cos< / a > < / li >
< li > < a href = "#Dcosh" > cosh< / a > < / li >
< li > < a href = "#Dcosh" > cosh< / a > < / li >
< li > < a href = "#Ddiv" > div< / a > < / li >
< li > < a href = "#Ddiv" > div< / a > < / li >
@ -92,10 +91,11 @@ li span{float:right;margin-right:10px;color:#c0c0c0}
< li > < a href = "#Dmin" > min< / a > < / li >
< li > < a href = "#Dmin" > min< / a > < / li >
< li > < a href = "#Dmod" > mod< / a > < / li >
< li > < a href = "#Dmod" > mod< / a > < / li >
< li > < a href = "#Dmul" > mul< / a > < / li >
< li > < a href = "#Dmul" > mul< / a > < / li >
< li > < a href = "#DnoConflict" > noConflict< / a > < / li >
< li > < a href = "#DnoConflict" > < strong > noConflict< / strong > < / a > < / li >
< li > < a href = "#Dpow" > pow< / a > < / li >
< li > < a href = "#Dpow" > pow< / a > < / li >
< li > < a href = "#Drandom" > random< / a > < / li >
< li > < a href = "#Drandom" > random< / a > < / li >
< li > < a href = "#Dround" > round< / a > < / li >
< li > < a href = "#Dround" > round< / a > < / li >
< li > < a href = "#Dset" > < strong > set< / strong > < / a > < / li >
< li > < a href = "#Dsign" > sign< / a > < / li >
< li > < a href = "#Dsign" > sign< / a > < / li >
< li > < a href = "#Dsin" > sin< / a > < / li >
< li > < a href = "#Dsin" > sin< / a > < / li >
< li > < a href = "#Dsinh" > sinh< / a > < / li >
< li > < a href = "#Dsinh" > sinh< / a > < / li >
@ -442,10 +442,10 @@ a.equals(b) // true</pre>
< p > < code > object< / code > : < i > object< / i > < / p >
< p > < code > object< / code > : < i > object< / i > < / p >
< p >
< p >
Returns a new independent Decimal constructor with configuration settings as described by
Returns a new independent Decimal constructor with configuration settings as described by
< code > object< / code > (see < a href = '#D config'> < code > config < / code > < / a > ), or with the same
< code > object< / code > (see < a href = '#D set'> < code > set < / code > < / a > ), or with the same
settings as < code > this< / code > Decimal constructor if < code > object< / code > is omitted.
settings as < code > this< / code > Decimal constructor if < code > object< / code > is omitted.
< / p >
< / p >
< pre > Decimal.config ({ precision: 5 })
< pre > Decimal.set ({ precision: 5 })
D9 = Decimal.clone({ precision: 9 })
D9 = Decimal.clone({ precision: 9 })
a = new Decimal(1)
a = new Decimal(1)
@ -456,7 +456,7 @@ b.div(3) // 0.333333333
// D9 = Decimal.clone({ precision: 9 }) is equivalent to:
// D9 = Decimal.clone({ precision: 9 }) is equivalent to:
D9 = Decimal.clone()
D9 = Decimal.clone()
D9.config ({ precision: 9 })< / pre >
D9.set ({ precision: 9 })< / pre >
< p >
< p >
It is not inefficient in terms of memory usage to use multiple Decimal constructors as
It is not inefficient in terms of memory usage to use multiple Decimal constructors as
functions are shared between them.
functions are shared between them.
@ -464,45 +464,6 @@ D9.config({ precision: 9 })</pre>
< h5 id = "Dconfig" >
config< code class = 'inset' > .config(object) < i > ⇒ Decimal constructor< / i > < / code >
< / h5 >
< p > < code > object< / code > : < i > object< / i > < / p >
< p >
Configures the 'global' settings for < code > this< / code > particular Decimal constructor, i.e.
the settings which apply to operations performed on the Decimal instances created by it.
< / p >
< p > Returns < code > this< / code > Decimal constructor.< / p >
< p >
The configuration object, < code > object< / code > , can contain some or all of the properties
described in detail at < a href = "#constructor-properties" > Properties< / a > and shown in the
example below.
< / p >
< p >
The values of the configuration object properties are checked for validity and then stored as
equivalently-named properties of < code > this< / code > Decimal constructor.
< / p >
< p > Throws on an invalid < code > object< / code > or configuration property value.< / p >
< pre >
// Defaults
Decimal.config({
precision: 20,
rounding: 4,
toExpNeg: -7,
toExpPos: 21,
maxE: 9e15,
minE: -9e15,
modulo: 1,
crypto: undefined
})< / pre >
< p >
The properties of a Decimal constructor can also be set by direct assignment, but that will
by-pass the validity checking that this method performs - which is not a problem if the user
knows that the checks are unnecessary.
< / p >
< h5 id = "Dcos" > cos< code class = 'inset' > .cos(x) < i > ⇒ Decimal< / i > < / code > < / h5 >
< h5 id = "Dcos" > cos< code class = 'inset' > .cos(x) < i > ⇒ Decimal< / i > < / code > < / h5 >
< p > < code > x< / code > : < i > number|string|Decimal< / i > < / p >
< p > < code > x< / code > : < i > number|string|Decimal< / i > < / p >
< p > See < code > < a href = '#cos' > cosine< / a > < / code > .< / p >
< p > See < code > < a href = '#cos' > cosine< / a > < / code > .< / p >
@ -710,13 +671,12 @@ a.equals(b) // true</pre>
< / p >
< / p >
< p >
< p >
If the value of < code > this< / code > Decimal constructor's
If the value of < code > this< / code > Decimal constructor's
< a href = '#crypto' > < code > crypto< / code > < / a > property is < code > undefined< / code > or
< a href = '#crypto' > < code > crypto< / code > < / a > property is < code > true< / code > , and the
< code > true< / code > , and the < code > crypto< / code > object is available in the host environment,
< code > crypto< / code > object is available in the host environment, the random digits of the
the random digits of the return value are generated by either
return value are generated by either < code > crypto.getRandomValues< / code > (Web Cryptography API
< code > crypto.getRandomValues< / code > (Web Cryptography API in modern browsers) or
in modern browsers) or < code > crypto.randomBytes< / code > (Node.js), otherwise, if the the value
< code > crypto.randomBytes< / code > (Node.js), otherwise, if the the value of the property is
of the property is < code > false< / code > the return value is generated by
< code > false< / code > , or the < code > crypto< / code > object is not available, the return value is
< code > Math.random< / code > (fastest).
generated by < code > Math.random< / code > (fastest).
< / p >
< / p >
< p >
< p >
If the value of < code > this< / code > Decimal constructor's
If the value of < code > this< / code > Decimal constructor's
@ -728,7 +688,7 @@ a.equals(b) // true</pre>
If one of the < code > crypto< / code > methods is used, the value of the returned Decimal should be
If one of the < code > crypto< / code > methods is used, the value of the returned Decimal should be
cryptographically-secure and statistically indistinguishable from a random value.
cryptographically-secure and statistically indistinguishable from a random value.
< / p >
< / p >
< pre > Decimal.config ({ precision: 10 })
< pre > Decimal.set ({ precision: 10 })
Decimal.random() // '0.4117936847'
Decimal.random() // '0.4117936847'
Decimal.random(20) // '0.78193327636914089009'< / pre >
Decimal.random(20) // '0.78193327636914089009'< / pre >
@ -743,6 +703,44 @@ a.equals(b) // true</pre>
< h5 id = "Dset" > set< code class = 'inset' > .set(object) < i > ⇒ Decimal constructor< / i > < / code > < / h5 >
< p > < code > object< / code > : < i > object< / i > < / p >
< p >
Configures the 'global' settings for < code > this< / code > particular Decimal constructor, i.e.
the settings which apply to operations performed on the Decimal instances created by it.
< / p >
< p > Returns < code > this< / code > Decimal constructor.< / p >
< p >
The configuration object, < code > object< / code > , can contain some or all of the properties
described in detail at < a href = "#constructor-properties" > Properties< / a > and shown in the
example below.
< / p >
< p >
The values of the configuration object properties are checked for validity and then stored as
equivalently-named properties of < code > this< / code > Decimal constructor.
< / p >
< p > Throws on an invalid < code > object< / code > or configuration property value.< / p >
< pre >
// Defaults
Decimal.set({
precision: 20,
rounding: 4,
toExpNeg: -7,
toExpPos: 21,
maxE: 9e15,
minE: -9e15,
modulo: 1,
crypto: false
})< / pre >
< p >
The properties of a Decimal constructor can also be set by direct assignment, but that will
by-pass the validity checking that this method performs - this is not a problem if the user
knows that the assingment is valid.
< / p >
< pre > Decimal.precision = 40< / pre >
< h5 id = "Dsign" > sign< code class = 'inset' > .sign(x) < i > ⇒ number< / i > < / code > < / h5 >
< h5 id = "Dsign" > sign< code class = 'inset' > .sign(x) < i > ⇒ number< / i > < / code > < / h5 >
< p > < code > x< / code > : < i > number|string|Decimal< / i > < / p >
< p > < code > x< / code > : < i > number|string|Decimal< / i > < / p >
< table >
< table >
@ -851,14 +849,14 @@ a.equals(b) // true</pre>
< a href = '#maxE' > < code > maxE< / code > < / a > , < a href = '#toExpNeg' > < code > toExpNeg< / code > < / a > ,
< a href = '#maxE' > < code > maxE< / code > < / a > , < a href = '#toExpNeg' > < code > toExpNeg< / code > < / a > ,
< a href = '#toExpPos' > < code > toExpPos< / code > < / a > , < a href = '#modulo' > < code > modulo< / code > < / a > , and
< a href = '#toExpPos' > < code > toExpPos< / code > < / a > , < a href = '#modulo' > < code > modulo< / code > < / a > , and
< a href = '#crypto' > < code > crypto< / code > < / a > are set using the
< a href = '#crypto' > < code > crypto< / code > < / a > are set using the
< a href = '#D config'> < code > config < / code > < / a > method.
< a href = '#D set'> < code > set < / code > < / a > method.
< / p >
< / p >
< p >
< p >
As simple object properties they can be set directly without using
As simple object properties they can be set directly without using
< a href = '#D config'> < code > config < / code > < / a > , and it is fine to do so, but the values assigned
< a href = '#D set'> < code > set < / code > < / a > , and it is fine to do so, but the values assigned
will not then be checked for validity. For example:
will not then be checked for validity. For example:
< / p >
< / p >
< pre > Decimal.config ({ precision: 0 })
< pre > Decimal.set ({ precision: 0 })
// '[DecimalError] Invalid argument: precision: 0'
// '[DecimalError] Invalid argument: precision: 0'
Decimal.precision = 0
Decimal.precision = 0
@ -882,7 +880,7 @@ Decimal.precision = 0
< a href = '#toNearest' > < code > toNearest< / code > < / a > and
< a href = '#toNearest' > < code > toNearest< / code > < / a > and
< a href = '#trunc' > < code > truncated< / code > < / a > .
< a href = '#trunc' > < code > truncated< / code > < / a > .
< / p >
< / p >
< pre > Decimal.config ({ precision: 5 })
< pre > Decimal.set ({ precision: 5 })
Decimal.precision // 5< / pre >
Decimal.precision // 5< / pre >
@ -910,8 +908,8 @@ Decimal.precision // 5</pre>
The < a href = '#modes' > rounding modes< / a > are available as enumerated properties of the
The < a href = '#modes' > rounding modes< / a > are available as enumerated properties of the
constructor.
constructor.
< / p >
< / p >
< pre > Decimal.config ({ rounding: Decimal.ROUND_UP })
< pre > Decimal.set ({ rounding: Decimal.ROUND_UP })
Decimal.config({ rounding: 0 }) // equivalent
Decimal.set({ rounding: 0 }) // equivalent
Decimal.rounding // 0< / pre >
Decimal.rounding // 0< / pre >
@ -930,12 +928,12 @@ Decimal.rounding // 0</pre>
< p >
< p >
JavaScript numbers underflow to zero for exponents below < code > -324< / code > .
JavaScript numbers underflow to zero for exponents below < code > -324< / code > .
< / p >
< / p >
< pre > Decimal.config ({ minE: -500 })
< pre > Decimal.set ({ minE: -500 })
Decimal.minE // -500
Decimal.minE // -500
new Decimal('1e-500') // '1e-500'
new Decimal('1e-500') // '1e-500'
new Decimal('9.9e-501') // '0'
new Decimal('9.9e-501') // '0'
Decimal.config ({ minE: -3 })
Decimal.set ({ minE: -3 })
new Decimal(0.001) // '0.01' e is -3
new Decimal(0.001) // '0.01' e is -3
new Decimal(0.0001) // '0' e is -4< / pre >
new Decimal(0.0001) // '0' e is -4< / pre >
< p >
< p >
@ -959,12 +957,12 @@ new Decimal(0.0001) // '0' e is -4</pre>
< p >
< p >
JavaScript numbers overflow to < code > Infinity< / code > for exponents above < code > 308< / code > .
JavaScript numbers overflow to < code > Infinity< / code > for exponents above < code > 308< / code > .
< / p >
< / p >
< pre > Decimal.config ({ maxE: 500 })
< pre > Decimal.set ({ maxE: 500 })
Decimal.maxE // 500
Decimal.maxE // 500
new Decimal('9.999e500') // '9.999e+500'
new Decimal('9.999e500') // '9.999e+500'
new Decimal('1e501') // 'Infinity'
new Decimal('1e501') // 'Infinity'
Decimal.config ({ maxE: 4 })
Decimal.set ({ maxE: 4 })
new Decimal(99999) // '99999' e is 4
new Decimal(99999) // '99999' e is 4
new Decimal(100000) // 'Infinity'< / pre >
new Decimal(100000) // 'Infinity'< / pre >
< p >
< p >
@ -982,13 +980,13 @@ new Decimal(100000) // 'Infinity'</pre>
The negative exponent value at and below which < a href = '#toString' > < code > toString< / code > < / a >
The negative exponent value at and below which < a href = '#toString' > < code > toString< / code > < / a >
returns exponential notation.
returns exponential notation.
< / p >
< / p >
< pre > Decimal.config ({ toExpNeg: -7 })
< pre > Decimal.set ({ toExpNeg: -7 })
Decimal.toExpNeg // -7
Decimal.toExpNeg // -7
new Decimal(0.00000123) // '0.00000123' e is -6
new Decimal(0.00000123) // '0.00000123' e is -6
new Decimal(0.000000123) // '1.23e-7'
new Decimal(0.000000123) // '1.23e-7'
// Always return exponential notation:
// Always return exponential notation:
Decimal.config ({ toExpNeg: 0 })< / pre >
Decimal.set ({ toExpNeg: 0 })< / pre >
< p >
< p >
JavaScript numbers use exponential notation for negative exponents of < code > -7< / code > and
JavaScript numbers use exponential notation for negative exponents of < code > -7< / code > and
below.
below.
@ -1011,13 +1009,13 @@ Decimal.config({ toExpNeg: 0 })</pre>
The positive exponent value at and above which < a href = '#toString' > < code > toString< / code > < / a >
The positive exponent value at and above which < a href = '#toString' > < code > toString< / code > < / a >
returns exponential notation.
returns exponential notation.
< / p >
< / p >
< pre > Decimal.config ({ toExpPos: 2 })
< pre > Decimal.set ({ toExpPos: 2 })
Decimal.toExpPos // 2
Decimal.toExpPos // 2
new Decimal(12.3) // '12.3' e is 1
new Decimal(12.3) // '12.3' e is 1
new Decimal(123) // '1.23e+2'
new Decimal(123) // '1.23e+2'
// Always return exponential notation:
// Always return exponential notation:
Decimal.config ({ toExpPos: 0 })< / pre >
Decimal.set ({ toExpPos: 0 })< / pre >
< p >
< p >
JavaScript numbers use exponential notation for positive exponents of < code > 20< / code > and
JavaScript numbers use exponential notation for positive exponents of < code > 20< / code > and
above.
above.
@ -1084,23 +1082,23 @@ Decimal.config({ toExpPos: 0 })</pre>
< p >
< p >
The rounding/modulo modes are available as enumerated properties of the Decimal constructor.
The rounding/modulo modes are available as enumerated properties of the Decimal constructor.
< / p >
< / p >
< pre > Decimal.config ({ modulo: Decimal.EUCLID })
< pre > Decimal.set ({ modulo: Decimal.EUCLID })
Decimal.config({ modulo: 9 }) // equivalent
Decimal.set({ modulo: 9 }) // equivalent
Decimal.modulo // 9< / pre >
Decimal.modulo // 9< / pre >
< h5 id = "crypto" > crypto< / h5 >
< h5 id = "crypto" > crypto< / h5 >
< p >
< p >
< i > boolean< / i > : < code > true/false/undefined < / code > < br / > Default value: < code > undefined < / code >
< i > boolean< / i > : < code > true/false< / code > < br / > Default value: < code > false < / code >
< / p >
< / p >
< p >
< p >
The value that determines whether cryptographically-secure pseudo-random number generation is
The value that determines whether cryptographically-secure pseudo-random number generation is
used.
used.
< / p >
< / p >
< p > See < a href = '#Drandom' > < code > random< / code > < / a > .< / p >
< p > See < a href = '#Drandom' > < code > random< / code > < / a > .< / p >
< pre > Decimal.crypto // undefined
< pre > Decimal.crypto // false
Decimal.config ({ crypto: true })
Decimal.set ({ crypto: true })
Decimal.crypto // true< / pre >
Decimal.crypto // true< / pre >
@ -1144,8 +1142,8 @@ Decimal.crypto // true</pre>
< td > Not a rounding mode, see < a href = '#modulo' > modulo< / a > < / td >
< td > Not a rounding mode, see < a href = '#modulo' > modulo< / a > < / td >
< / tr >
< / tr >
< / table >
< / table >
< pre > Decimal.config ({ rounding: Decimal.ROUND_CEIL })
< pre > Decimal.set ({ rounding: Decimal.ROUND_CEIL })
Decimal.config({ rounding: 2 }) // equivalent
Decimal.set({ rounding: 2 }) // equivalent
Decimal.rounding // 2< / pre >
Decimal.rounding // 2< / pre >
@ -1870,7 +1868,7 @@ y.sd(true) // '6'</pre>
< code > 7< / code > , i.e. < a href = '#modes' > < code > ROUND_HALF_CEIL< / code > < / a > .
< code > 7< / code > , i.e. < a href = '#modes' > < code > ROUND_HALF_CEIL< / code > < / a > .
< / p >
< / p >
< pre >
< pre >
Decimal.config ({ rounding: 4 })
Decimal.set ({ rounding: 4 })
x = 1234.5
x = 1234.5
x.round() // '1235'
x.round() // '1235'
@ -2311,7 +2309,7 @@ new Decimal(1217652.23).pow('98765.489305603941')
An example of incorrect rounding:
An example of incorrect rounding:
< / p >
< / p >
< pre >
< pre >
Decimal.config ({ precision: 20, rounding: 1 })
Decimal.set ({ precision: 20, rounding: 1 })
new Decimal(28).pow('6.166675020000903537297764507632802193308677149')
new Decimal(28).pow('6.166675020000903537297764507632802193308677149')
// 839756321.64088511< / pre >
// 839756321.64088511< / pre >
< p > As the exact mathematical result begins< / p >
< p > As the exact mathematical result begins< / p >
@ -2383,7 +2381,7 @@ y.toPrecision(5) // '45.600'</pre>
< / p >
< / p >
< p > Throws on an invalid < code > sd< / code > or < code > rm< / code > value.< / p >
< p > Throws on an invalid < code > sd< / code > or < code > rm< / code > value.< / p >
< pre >
< pre >
Decimal.config ({ precision: 5, rounding: 4 })
Decimal.set ({ precision: 5, rounding: 4 })
x = new Decimal(9876.54321)
x = new Decimal(9876.54321)
x.toSignificantDigits() // '9876.5'
x.toSignificantDigits() // '9876.5'
@ -2405,10 +2403,10 @@ x // '9876.54321'</pre>
< pre >
< pre >
x = new Decimal(750000)
x = new Decimal(750000)
x.toString() // '750000'
x.toString() // '750000'
Decimal.config ({ toExpPos: 5 })
Decimal.set ({ toExpPos: 5 })
x.toString() // '7.5e+5'
x.toString() // '7.5e+5'
Decimal.config({ precision: 4 });
Decimal.set({ precision: 4 })
y = new Decimal('1.23456789')
y = new Decimal('1.23456789')
y.toString() // '1.23456789'< / pre >
y.toString() // '1.23456789'< / pre >