Skip to content

参考

decimal.js 常用方法、舍入常量与配置项速查。版本基线 decimal.js 10.x(本地实测 10.6.0)。

一、构造与导入

js
import Decimal from 'decimal.js'           // ESM
const Decimal = require('decimal.js')      // CJS

new Decimal(123.45)        // number
new Decimal('123.45')      // string(推荐)
new Decimal('1.2e3')       // 指数记法 → 1200
new Decimal('0xff')        // 十六进制 → 255(big.js 不支持)
new Decimal(otherDecimal)  // 克隆

二、四则与基础运算

方法别名作用
plus(x)add
minus(x)sub
times(x)mul
dividedBy(x)div除(真除法,7/2=3.5
dividedToIntegerBy(x)idiv整数除法
mod(x)取余(受 modulo 配置影响)
pow(x)toPower幂(支持非整数指数
sqrt()平方根
cbrt()立方根
abs()absoluteValue绝对值
negated()neg取负

静态两参版:Decimal.add(x,y) / Decimal.sub / Decimal.mul / Decimal.div / Decimal.mod / Decimal.pow

三、舍入与取整

方法别名作用
round()舍入到整数(按 rounding)
ceil()向上取整
floor()向下取整
trunc()truncated向零截断
toDecimalPlaces(dp, rm)toDP小数位舍入 → Decimal
toSignificantDigits(sd, rm)toSD有效数字舍入 → Decimal
toNearest(x, rm)舍入到 x 的最近倍数

四、比较与判定

方法别名返回
comparedTo(x)cmp-1 / 0 / 1 / NaN
equals(x)eq布尔
greaterThan(x)gt布尔
greaterThanOrEqualTo(x)gte布尔
lessThan(x)lt布尔
lessThanOrEqualTo(x)lte布尔
isNaN()是否 NaN
isFinite()是否有限
isInteger()isInt是否整数
isZero()是否零
isNegative()isNeg是否负
isPositive()isPos是否正

不要用 === / ==

Decimal 是对象;=== 比较引用、== 走隐式转换。判等一律用 equals / comparedTo

五、输出与转换

方法返回说明
toString()string去尾随零;超阈值用指数记法
valueOf()string类似 toString,保留有符号零
toJSON()string等同 valueOf(JSON.stringify 调用)
toNumber()number回原生 number(仅最终用)
toFixed(dp, rm)string定点,补尾随零,总是普通记法
toExponential(dp, rm)string科学计数法
toPrecision(sd, rm)string按有效数字
toFraction(maxDen?)[Decimal, Decimal]最接近的分数 [分子, 分母]
toBinary / toOctal / toHexadecimal(sd?, rm?)string进制输出(toHex 是别名)
decimalPlaces()number小数位数(别名 dp
precision(incZeros?)number有效数字位数(别名 sd

六、高级数学函数(big.js / bignumber.js 没有)

text
三角:    sin  cos  tan        (别名 sine / cosine / tangent)
反三角:  asin acos atan       (inverseSine 等)
双曲:    sinh cosh tanh       (hyperbolicSine 等)
反双曲:  asinh acosh atanh
对数:    ln  log(base)  log2  log10
指数:    exp                  (naturalExponential)

七、静态方法

方法作用
Decimal.set(config) / Decimal.config(config)全局配置(带校验,推荐)
Decimal.clone(config?)派生配置独立的新构造函数
Decimal.sum(...args)求和
Decimal.max(...args) / Decimal.min(...args)最大 / 最小
Decimal.hypot(...args)欧氏范数(√(x²+y²+…))
Decimal.sign(x)符号
Decimal.random(dp?)随机 Decimal(crypto:true 时加密安全)
Decimal.isDecimal(obj)是否 Decimal 实例
Decimal.noConflict()浏览器全局冲突恢复

八、舍入常量

text
ROUND_UP         = 0   远离零
ROUND_DOWN       = 1   趋向零(截断)
ROUND_CEIL       = 2   趋向 +∞
ROUND_FLOOR      = 3   趋向 -∞
ROUND_HALF_UP    = 4   四舍五入,平局远离零(默认 rounding)
ROUND_HALF_DOWN  = 5   四舍五入,平局趋向零
ROUND_HALF_EVEN  = 6   四舍五入,平局取偶(银行家舍入)
ROUND_HALF_CEIL  = 7   四舍五入,平局趋向 +∞
ROUND_HALF_FLOOR = 8   四舍五入,平局趋向 -∞
EUCLID           = 9   仅 modulo:欧氏取余(余数非负)

九、配置项(Decimal.set)

属性默认范围含义
precision201 ~ 1e9结果保留的有效数字位数
rounding40 ~ 8默认舍入模式
toExpNeg-7-9e15 ~ 0小数方向转指数记法的指数阈值
toExpPos210 ~ 9e15大数方向转指数记法的指数阈值
minE-9e15-9e15 ~ 0下溢指数下限
maxE9e150 ~ 9e15上溢指数上限
modulo10 ~ 9mod 的取余模式(可用 EUCLID)
cryptofalse布尔random 是否用加密随机源
js
Decimal.set({ precision: 30, rounding: Decimal.ROUND_HALF_EVEN, modulo: Decimal.EUCLID })

十、三库速查对比

big.jsbignumber.jsdecimal.js
体积 / API最小居中最全
精度语义小数位 DP小数位 DECIMAL_PLACES有效数字 precision
默认精度 / 舍入DP=20 / RM=120 / 420 / 4
NaN / Infinity不支持(抛错)支持支持
多进制 I/O不支持支持(2~36)支持(0x/0o/0b
三角 / 对数 / 非整数幂

更多细节见 官方文档GitHub