模块: math

一种用于JavaScript的任意精度的十进制类型,引用自decimal.js,有关进一步的信息,请参见 API引用

构造

var x = new $api.math(123.4567)
var y = new $api.math('123456.7e-3')
x.equals(y) && y.equals(z) && x.equals(z)        // true

二进制,八进制,十六进制

// 使用二进制,八进制,十六进制
var x = new $api.math('0xff.f')            // '255.9375'
var y = new $api.math('0b10101100')        // '172'
var z = x.plus(y)                          // '427.9375'

z.toBinary()                               // '0b110101011.1111'
z.toBinary(13)                             // '0b1.101010111111p+8'

// 用二进制指数记数法创建一个十进制数
var x = new $api.math('0b1.1111111111111111111111111111111111111111111111111111p+1023')

实例化的值是不会变的

0.3 - 0.1                     // 0.19999999999999998
// 使用它的方法后,math实例化的值是不会变的
var x = new $api.math(0.3)
x.minus(0.1)                  // '0.2'
x                             // '0.3'

链式调用

x.dividedBy(y).plus(z).times(9).floor()
x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').ceil()

短名称

// 很多方法有短名称
x = new $api.math(16)
x.squareRoot()                           // '4'
y = new $api.math(3)
y.sqrt()                                 // '1.73205080756887729353'
y.sqrt().eq( y.pow(0.5) )                // true

toExponential, toFixed and toPrecision

// 和 JavaScript's Number 类型一样,有 toExponential, toFixed and toPrecision 方法
x = new $api.math(255.5)
x.toExponential(5)              // '2.55500e+2'
x.toFixed(5)                    // '255.50000'
x.toPrecision(5)                // '255.50'

JavaScript's math 对象的方法

// 几乎所有的 JavaScript's math 对象的方法,这里都有
$api.math.sqrt('6.98372465832e+9823')      // '8.3568682281821340204e+4911'
$api.math.pow(2, 0.0979843)                // '1.0702770511687781839'

NaN 和 Infinity 是有效的 $api.Math值,

// 有isNaN 和 isFinite方法
x = new $api.math(NaN)                                           // 'NaN'
y = new $api.math(Infinity)                                      // 'Infinity'

// NaN 和 Infinity 是有效的 $api.Math值
x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite()        // true

toFraction 具有可选的最大分母参数

// toFraction 具有可选的最大分母参数
z = new $api.math(355)
pi = z.dividedBy(113)        // '3.1415929204'
pi.toFraction()              // [ '7853982301', '2500000000' ]
pi.toFraction(1000)          // [ '355', '113' ]

精度和舍入

// 根据精确数字和舍入属性指定的有效数字和舍入模式,所有计算均舍入。
// 对于高级用法,可以创建多个构造函数,每个构造函数都有自己独立的配置,适用于从它创建的所有十进制数
// 设置构造函数默认的精度和舍入
$api.math.set({ precision: 5, rounding: 4 })
// 创建另一个构造函数,可选地在配置对象中传递
Math9 = $api.math.clone({ precision: 9, rounding: 1 })
x = new $api.math(5)
y = new Math9(5)
x.div(3)                           // '1.6667'
y.div(3)                           // '1.66666666'

$api.math 的值有 digits、exponent 和 sign。

// $api.math 的值以浮点格式存储,并有 digits、exponent 和 sign。
x = new $api.math(-12345.67)
x.d                            // [ 12345, 6700000 ]    digits (base 10000000)
x.e                            // 4                     exponent (base 10)
x.s                            // -1                    sign