JS精度溢出和银行家舍入法

JS中只有一种数字格式即Number,遵循IEEE 754标准,在我们计算过程中会发现诸如

                                        0.1+0.2 = 0.30000000000000004

的奇怪现象,这是因为计算机中数值精度是有范围的,原理请参照JavaScript 浮点数陷阱及解法

如果链接跳转有问题可以直接查看下列解决方法。

解决方法

通过Number对象上面的两个方法可以取得一个指定位数的小数

1,toPrecision() 方法以指定的精度返回该数值对象的字符串表示。

语法:

numObj.toPrecision(precision)

precision 可选。一个用来指定有效数个数的整数。

2,toFixed() 方法使用定点表示法来格式化一个数值。

语法: 

numObj.toFixed(digits)

digits

小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0。

let num = 1.2345
console.log(num.toFixed(3))
//1.234
console.log(num.toPrecision(4))
//1.234

不足

我们调用上面两个方法时,不是单纯的截取指定位数,也不是进行数学保留有效小数式的四舍五入,更不是网上大部分都在说的”银行家舍入法“,相关计算规则参考ECMA toFixed计算规则

参考资料

MDN文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值