美文网首页
js 使用parseInt保留两位小数的坑

js 使用parseInt保留两位小数的坑

作者: Nardy | 来源:发表于2018-07-28 18:15 被阅读162次

在js中,保留两位小数的方法有很多种,在开发 快捎 项目时,在一处数据处理中,使用了类似如下代码:

var realPrice = 2.51;  //其中一个示例值
var targetPrice = parseInt(realPrice * 100) / 100;
console.log(">>>", targetPrice);

本来是为了确保把realPrice保留两位小数后赋值给targetPrice, 但发现结果并不是这样,在控制台输出如下:

image.png

不应该是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)

得到如下结果:


image.png

终于知道是何故了。

当一个浮点数与任何Number数据进行运算时,都可能会产生精度不准确的问题,以上就是一个例子。而parseInt函数会直接把Number类型的数据进行 舍尾 取值。自然而然地,parseInt(realPrice * 100)的结果是250了,最终```targetPrice``结果也就是2.5了。

提醒:js中凡是使用浮点数进行运算的,都应该留意其精度产生的误差,避免对计算结果造成影响!!!

▭ 解决方案

  1. parseInt函数替换成Math.round函数。
  2. 使用+realPrice.toFixed(2)

相关文章

网友评论

      本文标题:js 使用parseInt保留两位小数的坑

      本文链接:https://www.haomeiwen.com/subject/jbaomftx.html