mirror of
https://github.com/MikeMcl/decimal.js.git
synced 2024-10-27 20:34:12 +00:00
v7.0.0
This commit is contained in:
parent
46b1aad320
commit
e48bddf45a
@ -1,6 +1,7 @@
|
|||||||
language: node_js
|
language: node_js
|
||||||
node_js:
|
node_js:
|
||||||
- "node"
|
- "node"
|
||||||
|
- "7"
|
||||||
- "6"
|
- "6"
|
||||||
- "5"
|
- "5"
|
||||||
- "4"
|
- "4"
|
||||||
|
84
CHANGELOG.md
84
CHANGELOG.md
@ -1,77 +1,83 @@
|
|||||||
|
#### 7.0.0
|
||||||
|
* 09/11/2016
|
||||||
|
* Remove `require('crypto')` - leave it to the user
|
||||||
|
* Default `Decimal.crypto` to `false`
|
||||||
|
* Add `Decimal.set` as `Decimal.config` alias
|
||||||
|
|
||||||
#### 6.0.0
|
#### 6.0.0
|
||||||
* 30/06/2016
|
* 30/06/2016
|
||||||
* Removed base-88 serialization format.
|
* Removed base-88 serialization format
|
||||||
* Amended `toJSON` and removed `Decimal.fromJSON` accordingly.
|
* Amended `toJSON` and removed `Decimal.fromJSON` accordingly
|
||||||
|
|
||||||
#### 5.0.8
|
#### 5.0.8
|
||||||
* 09/03/2016
|
* 09/03/2016
|
||||||
* Add newline to single test results.
|
* Add newline to single test results
|
||||||
* Correct year.
|
* Correct year
|
||||||
|
|
||||||
#### 5.0.7
|
#### 5.0.7
|
||||||
* 29/02/2016
|
* 29/02/2016
|
||||||
* Add decimal.js-light link.
|
* Add decimal.js-light link
|
||||||
* Remove outdated example from docs.
|
* Remove outdated example from docs
|
||||||
|
|
||||||
#### 5.0.6
|
#### 5.0.6
|
||||||
* 22/02/2016
|
* 22/02/2016
|
||||||
* Add bower.json.
|
* Add bower.json
|
||||||
|
|
||||||
#### 5.0.5
|
#### 5.0.5
|
||||||
* 20/02/2016
|
* 20/02/2016
|
||||||
* Bugfix: #26 wrong precision applied.
|
* Bugfix: #26 wrong precision applied
|
||||||
|
|
||||||
#### 5.0.4
|
#### 5.0.4
|
||||||
* 14/02/2016
|
* 14/02/2016
|
||||||
* Bugfix: #26 clone.
|
* Bugfix: #26 clone
|
||||||
|
|
||||||
#### 5.0.3
|
#### 5.0.3
|
||||||
* 06/02/2016
|
* 06/02/2016
|
||||||
* Refactor tests.
|
* Refactor tests
|
||||||
|
|
||||||
#### 5.0.2
|
#### 5.0.2
|
||||||
* 05/02/2016
|
* 05/02/2016
|
||||||
* Added immutability tests.
|
* Added immutability tests
|
||||||
* Minor *decimal.js* clean-up.
|
* Minor *decimal.js* clean-up
|
||||||
|
|
||||||
#### 5.0.1
|
#### 5.0.1
|
||||||
* 28/01/2016
|
* 28/01/2016
|
||||||
* Bugfix: #20 cos mutates value.
|
* Bugfix: #20 cos mutates value
|
||||||
* Add pi info to docs.
|
* Add pi info to docs
|
||||||
|
|
||||||
#### 5.0.0
|
#### 5.0.0
|
||||||
* 25/01/2016
|
* 25/01/2016
|
||||||
* Added trigonometric functions and `cubeRoot` method.
|
* Added trigonometric functions and `cubeRoot` method
|
||||||
* Added most of JavaScript's `Math` object methods as Decimal methods.
|
* Added most of JavaScript's `Math` object methods as Decimal methods
|
||||||
* Added `toBinary`, `toHexadecimal` and `toOctal` methods.
|
* Added `toBinary`, `toHexadecimal` and `toOctal` methods
|
||||||
* Added `isPositive` method.
|
* Added `isPositive` method
|
||||||
* Removed the 15 significant digit limit for numbers.
|
* Removed the 15 significant digit limit for numbers
|
||||||
* `toFraction` now returns an array of two Decimals, not two strings.
|
* `toFraction` now returns an array of two Decimals, not two strings
|
||||||
* String values containing whitespace or a plus sign are no longer accepted.
|
* String values containing whitespace or a plus sign are no longer accepted
|
||||||
* `valueOf` now returns `'-0'` for minus zero.
|
* `valueOf` now returns `'-0'` for minus zero
|
||||||
* `comparedTo` now returns `NaN` not `null` for comparisons with `NaN`.
|
* `comparedTo` now returns `NaN` not `null` for comparisons with `NaN`
|
||||||
* `Decimal.max` and `Decimal.min` no longer accept an array.
|
* `Decimal.max` and `Decimal.min` no longer accept an array
|
||||||
* The Decimal constructor and `toString` no longer accept a base argument.
|
* The Decimal constructor and `toString` no longer accept a base argument
|
||||||
* Binary, hexadecimal and octal prefixes are now recognised for string values.
|
* Binary, hexadecimal and octal prefixes are now recognised for string values
|
||||||
* Removed `Decimal.errors` configuration property.
|
* Removed `Decimal.errors` configuration property
|
||||||
* Removed `toFormat` method.
|
* Removed `toFormat` method
|
||||||
* Removed `Decimal.ONE`.
|
* Removed `Decimal.ONE`
|
||||||
* Renamed `exponential` method to `naturalExponential`.
|
* Renamed `exponential` method to `naturalExponential`
|
||||||
* Renamed `Decimal.constructor` method to `Decimal.clone`.
|
* Renamed `Decimal.constructor` method to `Decimal.clone`
|
||||||
* Simplified error handling and amended error messages.
|
* Simplified error handling and amended error messages
|
||||||
* Refactored the test suite.
|
* Refactored the test suite
|
||||||
* `Decimal.crypto` is now `undefined` by default, and the `crypto` object will be used if available.
|
* `Decimal.crypto` is now `undefined` by default, and the `crypto` object will be used if available
|
||||||
* Major internal refactoring.
|
* Major internal refactoring
|
||||||
* Removed *bower.json*.
|
* Removed *bower.json*
|
||||||
|
|
||||||
#### 4.0.2
|
#### 4.0.2
|
||||||
* 20/02/2015 Add bower.json. Add source map. Amend travis CI. Amend doc/comments.
|
* 20/02/2015 Add bower.json. Add source map. Amend travis CI. Amend doc/comments
|
||||||
|
|
||||||
#### 4.0.1
|
#### 4.0.1
|
||||||
* 11/12/2014 Assign correct constructor when duplicating a Decimal.
|
* 11/12/2014 Assign correct constructor when duplicating a Decimal
|
||||||
|
|
||||||
#### 4.0.0
|
#### 4.0.0
|
||||||
* 10/11/2014 `toFormat` amended to use `Decimal.format` object for more flexible configuration.
|
* 10/11/2014 `toFormat` amended to use `Decimal.format` object for more flexible configuration
|
||||||
|
|
||||||
#### 3.0.1
|
#### 3.0.1
|
||||||
* 8/06/2014 Surround crypto require in try catch. See issue #5
|
* 8/06/2014 Surround crypto require in try catch. See issue #5
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
The MIT Expat Licence.
|
The MIT Licence.
|
||||||
|
|
||||||
Copyright (c) 2016 Michael Mclaughlin
|
Copyright (c) 2016 Michael Mclaughlin
|
||||||
|
|
||||||
|
14
README.md
14
README.md
@ -4,10 +4,6 @@ An arbitrary-precision Decimal type for JavaScript.
|
|||||||
|
|
||||||
<br>
|
<br>
|
||||||
[![Build Status](https://travis-ci.org/MikeMcl/decimal.js.svg)](https://travis-ci.org/MikeMcl/decimal.js)
|
[![Build Status](https://travis-ci.org/MikeMcl/decimal.js.svg)](https://travis-ci.org/MikeMcl/decimal.js)
|
||||||
|
|
||||||
*For a smaller library without the trigonometric functions see the
|
|
||||||
[v4.x.x](https://github.com/MikeMcl/decimal.js/tree/v4.x.x) branch where version 4 of this library
|
|
||||||
continues to be supported, or see [decimal.js-light](https://github.com/MikeMcl/decimal.js-light/), which is smaller still.*
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
@ -24,7 +20,7 @@ continues to be supported, or see [decimal.js-light](https://github.com/MikeMcl/
|
|||||||
![API](https://raw.githubusercontent.com/MikeMcl/decimal.js/gh-pages/API.png)
|
![API](https://raw.githubusercontent.com/MikeMcl/decimal.js/gh-pages/API.png)
|
||||||
|
|
||||||
The library is similar to [bignumber.js](https://github.com/MikeMcl/bignumber.js/), but here
|
The library is similar to [bignumber.js](https://github.com/MikeMcl/bignumber.js/), but here
|
||||||
precision is specified in terms of significant digits instead of decimal places, and all
|
precision is specified in terms of significant digits rather than decimal places, and all
|
||||||
calculations are rounded to the precision (similar to Python's decimal module) rather than just
|
calculations are rounded to the precision (similar to Python's decimal module) rather than just
|
||||||
those involving division.
|
those involving division.
|
||||||
|
|
||||||
@ -32,6 +28,9 @@ This library also adds the trigonometric functions, among others, and supports n
|
|||||||
which makes it a significantly larger library than *bignumber.js* and the even smaller
|
which makes it a significantly larger library than *bignumber.js* and the even smaller
|
||||||
[big.js](https://github.com/MikeMcl/big.js/).
|
[big.js](https://github.com/MikeMcl/big.js/).
|
||||||
|
|
||||||
|
For a lighter version of this library without the trigonometric functions see the
|
||||||
|
[v4.x.x](https://github.com/MikeMcl/decimal.js/tree/v4.x.x) branch where version 4 continues to be supported, or better, see [decimal.js-light](https://github.com/MikeMcl/decimal.js-light/), which is lighter still.
|
||||||
|
|
||||||
## Load
|
## Load
|
||||||
|
|
||||||
The library is the single JavaScript file *decimal.js* (or minified, *decimal.min.js*).
|
The library is the single JavaScript file *decimal.js* (or minified, *decimal.min.js*).
|
||||||
@ -153,7 +152,7 @@ applies to all Decimal numbers created from it.
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
// Set the precision and rounding of the default Decimal constructor
|
// Set the precision and rounding of the default Decimal constructor
|
||||||
Decimal.config({ precision: 5, rounding: 4 })
|
Decimal.set({ precision: 5, rounding: 4 })
|
||||||
|
|
||||||
// Create another Decimal constructor, optionally passing in a configuration object
|
// Create another Decimal constructor, optionally passing in a configuration object
|
||||||
Decimal10 = Decimal.clone({ precision: 10, rounding: 1 })
|
Decimal10 = Decimal.clone({ precision: 10, rounding: 1 })
|
||||||
@ -217,6 +216,7 @@ npm run build
|
|||||||
|
|
||||||
will create *decimal.min.js*, and a source map will also be added to the *doc* directory.
|
will create *decimal.min.js*, and a source map will also be added to the *doc* directory.
|
||||||
|
|
||||||
|
|
||||||
## Feedback
|
## Feedback
|
||||||
|
|
||||||
<a href='mailto:M8ch88l@gmail.com'>M8ch88l@gmail.com</a>
|
<a href='mailto:M8ch88l@gmail.com'>M8ch88l@gmail.com</a>
|
||||||
@ -225,6 +225,6 @@ BTC 16MjxmTB5EZxY5Uk9xyhfsu4n9gYxEJYkY
|
|||||||
|
|
||||||
## Licence
|
## Licence
|
||||||
|
|
||||||
MIT Expat.
|
MIT.
|
||||||
|
|
||||||
See *LICENCE.md*
|
See *LICENCE.md*
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "decimal.js",
|
"name": "decimal.js",
|
||||||
"main": "decimal.js",
|
"main": "decimal.js",
|
||||||
"version": "6.0.0",
|
"version": "7.0.0",
|
||||||
"homepage": "https://github.com/MikeMcl/decimal.js",
|
"homepage": "https://github.com/MikeMcl/decimal.js",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Michael Mclaughlin <M8ch88l@gmail.com>"
|
"Michael Mclaughlin <M8ch88l@gmail.com>"
|
||||||
|
4
decimal.min.js
vendored
4
decimal.min.js
vendored
File diff suppressed because one or more lines are too long
158
doc/API.html
158
doc/API.html
@ -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='#Dconfig'><code>config</code></a>), or with the same
|
<code>object</code> (see <a href='#Dset'><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='#Dconfig'><code>config</code></a> method.
|
<a href='#Dset'><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='#Dconfig'><code>config</code></a>, and it is fine to do so, but the values assigned
|
<a href='#Dset'><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>
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "decimal.js",
|
"name": "decimal.js",
|
||||||
"description": "An arbitrary-precision Decimal type for JavaScript.",
|
"description": "An arbitrary-precision Decimal type for JavaScript.",
|
||||||
"version": "6.0.0",
|
"version": "7.0.0",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"arbitrary",
|
"arbitrary",
|
||||||
"precision",
|
"precision",
|
||||||
@ -28,6 +28,6 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "node ./test/test.js",
|
"test": "node ./test/test.js",
|
||||||
"build": "uglifyjs decimal.js --source-map doc/decimal.js.map -c -m -o decimal.min.js --preamble \"/* decimal.js v6.0.0 https://github.com/MikeMcl/decimal.js/LICENCE */\""
|
"build": "uglifyjs decimal.js --source-map doc/decimal.js.map -c -m -o decimal.min.js --preamble \"/* decimal.js v7.0.0 https://github.com/MikeMcl/decimal.js/LICENCE */\""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ T('config', function () {
|
|||||||
toExpPos: 1000,
|
toExpPos: 1000,
|
||||||
minE: -1e9,
|
minE: -1e9,
|
||||||
maxE: 1e9,
|
maxE: 1e9,
|
||||||
crypto: true,
|
//crypto: true, // requires crypto object
|
||||||
modulo: 4
|
modulo: 4
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ T('config', function () {
|
|||||||
t(Decimal.toExpPos === 1000);
|
t(Decimal.toExpPos === 1000);
|
||||||
t(Decimal.minE === -1e9);
|
t(Decimal.minE === -1e9);
|
||||||
t(Decimal.maxE === 1e9);
|
t(Decimal.maxE === 1e9);
|
||||||
t(Decimal.crypto === true || Decimal.crypto === false);
|
//t(Decimal.crypto === true); // requires crypto object
|
||||||
t(Decimal.modulo === 4);
|
t(Decimal.modulo === 4);
|
||||||
|
|
||||||
Decimal.config({
|
Decimal.config({
|
||||||
@ -277,15 +277,11 @@ T('config', function () {
|
|||||||
T.assertEqual(expected, Decimal.crypto);
|
T.assertEqual(expected, Decimal.crypto);
|
||||||
}
|
}
|
||||||
|
|
||||||
// crypto was set true above, but it will have remained false if
|
t(false, {crypto: void 0});
|
||||||
// there is no crypto.getRandomValues or crypto.randomBytes.
|
|
||||||
var cryptoVal = Decimal.crypto;
|
|
||||||
|
|
||||||
t(void 0, {crypto: void 0});
|
|
||||||
t(false, {crypto: 0});
|
t(false, {crypto: 0});
|
||||||
t(cryptoVal, {crypto: 1});
|
//t(true, {crypto: 1}); // requires crypto object
|
||||||
t(false, {crypto: false});
|
t(false, {crypto: false});
|
||||||
t(cryptoVal, {crypto: true});
|
//t(true, {crypto: true}); // requires crypto object
|
||||||
|
|
||||||
tx(function () {Decimal.config({crypto: 'hiya'})}, "crypto: 'hiya'");
|
tx(function () {Decimal.config({crypto: 'hiya'})}, "crypto: 'hiya'");
|
||||||
tx(function () {Decimal.config({crypto: 'true'})}, "crypto: 'true'");
|
tx(function () {Decimal.config({crypto: 'true'})}, "crypto: 'true'");
|
||||||
@ -301,7 +297,7 @@ T('config', function () {
|
|||||||
tx(function () {Decimal.config({crypto: NaN})}, "crypto: NaN");
|
tx(function () {Decimal.config({crypto: NaN})}, "crypto: NaN");
|
||||||
tx(function () {Decimal.config({crypto: Infinity})}, "crypto: Infinity");
|
tx(function () {Decimal.config({crypto: Infinity})}, "crypto: Infinity");
|
||||||
|
|
||||||
t(void 0, {crypto: void 0});
|
T.assertEqual(false, Decimal.crypto);
|
||||||
|
|
||||||
// modulo
|
// modulo
|
||||||
|
|
||||||
@ -341,4 +337,6 @@ T('config', function () {
|
|||||||
tx(function () {Decimal.config({modulo: Infinity})}, "modulo: Infinity");
|
tx(function () {Decimal.config({modulo: Infinity})}, "modulo: Infinity");
|
||||||
|
|
||||||
t(9, {modulo: void 0});
|
t(9, {modulo: void 0});
|
||||||
|
|
||||||
|
T.assertEqual(Decimal.set, Decimal.config);
|
||||||
});
|
});
|
||||||
|
@ -83,7 +83,8 @@
|
|||||||
if (!module) {
|
if (!module) {
|
||||||
time = new Date() - time;
|
time = new Date() - time;
|
||||||
document.body.innerHTML +=
|
document.body.innerHTML +=
|
||||||
'<br> In total, ' + passed + ' of ' + total + ' tests passed in ' + (time / 1e3) + ' secs.<br>';
|
'<br> In total, ' + passed + ' of ' + total + ' tests passed in ' +
|
||||||
|
(time / 1e3) + ' secs.<br>';
|
||||||
document.body.scrollIntoView(false);
|
document.body.scrollIntoView(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user