JS小数运算精度问题

我们可能在平时运算过程中碰到以下类似情况:
0.1 + 0.2 结果是 0.30000000000000004
0.0003 * 10 结果是 0.0029999999999999996
0.003 / 10 结果是 0.00030000000000000003

原因在于:在计算机内部,使用二进制浮点数并不能准确地表示像 0.1, 0.2 或 0.3 这样的数字,所以当编码或解释代码时,像“0.1”其实已经舍入为与0.1最接近的数字,即使在计算发生之前已经会导致小的舍入误差(是的,所有语言都是这样)

如果不想看到这些额外的小数位数:在显示时,我们可以用toFixed()或toPrecision() 之类将结果格式化为固定的小数位数

toFixed(num)可把 Number 四舍五入为指定小数位数的数字,结果是个字符串

(512).toFixed(4);//"512.0000"
(512.345).toFixed(2);//"512.35"

toPrecision(num)以指定的精度返回该数值对象的字符串表示

(5123456).toPrecision(5);//"5.1235e+6"
(512).toPrecision(6);//"512.000"

既然这里提及到toFixed()和toPrecision(),那么顺带说一下toString().

toString() 方法返回指定 Number 对象的字符串表示形式。

var count = 10;
console.log(count.toString());    // 输出 '10'
console.log((17).toString());     // 输出 '17'
console.log((17.2).toString());   // 输出 '17.2'

var x = 6;
console.log(x.toString(2));       // 输出 '110'
console.log((254).toString(16));  // 输出 'fe'
console.log((-10).toString(2));   // 输出 '-1010'
console.log((-0xff).toString(2)); // 输出 '-11111111'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值