在js中,保留两位小数的方法有很多种,在开发 快捎 项目时,在一处数据处理中,使用了类似如下代码:
var realPrice = 2.51; //其中一个示例值
var targetPrice = parseInt(realPrice * 100) / 100;
console.log(">>>", targetPrice);
本来是为了确保把realPrice
保留两位小数后赋值给targetPrice
, 但发现结果并不是这样,在控制台输出如下:

不应该是2.51
么?
我把realPrice
的值换成2.51111
, 然后测试,结果输出正常的2.51
。
怎么回事?不是说程序是不会骗人的吗?
本着打破砂锅问到底的好(zhuang)学(bi)心态, 我做了如下的测试:
var realPrice = 2.51; //其中一个示例值
console.log(parseInt(realPrice * 100))
得到结果依然是2.5
。
继续往下:
var realPrice = 2.51; //其中一个示例值
console.log(realPrice * 100)
得到如下结果:

终于知道是何故了。
当一个浮点数与任何Number数据进行运算时,都可能会产生精度不准确的问题,以上就是一个例子。而parseInt
函数会直接把Number类型的数据进行 舍尾 取值。自然而然地,parseInt(realPrice * 100)
的结果是250
了,最终```targetPrice``结果也就是2.5
了。
提醒:js中凡是使用浮点数进行运算的,都应该留意其精度产生的误差,避免对计算结果造成影响!!!
▭ 解决方案
- 把
parseInt
函数替换成Math.round
函数。 - 使用
+realPrice.toFixed(2)
。
网友评论