Load "lib/decimal.js" when using from the browser.
You can build a Decimal object by a String, a Number or an existing Decimal object.
The instance methods of the Decimal type is as follows:
add(other) sub(other) compare(other) mul(other) div(other) mod(other) neg() isZero() toString() toFloat()
I think their functionalities are self-explanatory.
All other instance methods are private and supposed to be used internally; when you use them, do so at your own risk.
The Decimal class has following class methods:
Abs(obj) Ceil(obj) Floor(obj) Round(obj, digits, mode) Truncate(obj)
The functionalities of Round() is the same as the .NET version. For example, if you want to round off a number to the second decimal place, you can do so by writing something like:
Decimal.Round(Decimal(1.234), 2, Decimal.MidpointRounding.AwayFromZero)
This returns a Decimal object with the value of 1.23.
The Decimal Type can represent numbers within the range of +/- 0 ~ 9999999999999999999999999999 with 28 significant digits.
This implementation makes the Decimal Type less prone to round-off errors when handling decimal numbers. The calculation of Decimal(0.1).mul(0.2).sub(0.3).div(0.4).toFloat() will give a result of -0.7, while calculation of (0.1 * 0.2 - 0.3) / 0.4 with a Number Type yields -0.6999999999999998.
Numbers represented by the Decimal Type have 28-digits precision. This means the least significant bits will be rounded off in some calculations. For example, Decimal(1).div(7).toString() gives "0.1428571428571428571428571429" (with 28 significant digits), but when you add 1 to it, the last "9" is rounded up and the result will be "1.142857142857142857142857143".
For Decimals with an absolute value less than 1, the value is exact to "28th decimal place". This means Decimal(1).div("700000000000000000000").toString() will give a result of "0.0000000000000000000014285714" (exact to 28th decimal place) and not "0.000000000000000000001428571428571428571428571429" (with 28 significant digits).