Javascript十进制问题
使用parseFloat方法将DB中的字符串值转换为float并乘以100。但产出看起来很奇怪。下面是我使用的一段代码Javascript十进制问题,javascript,google-chrome,Javascript,Google Chrome,使用parseFloat方法将DB中的字符串值转换为float并乘以100。但产出看起来很奇怪。下面是我使用的一段代码 parseFloat(upliftPer) * 100 //upliftPer value read from DB and its value is 0.0099 所以当它乘以100得到0.990000000000001时,我想得到0.99,但是一些垃圾值被附加。我也继续在chrome浏览器的控制台日志中做了同样的操作,结果仍然一样。我附上了截图供参考。我需要的解决方案是0
parseFloat(upliftPer) * 100 //upliftPer value read from DB and its value is 0.0099
所以当它乘以100得到0.990000000000001时,我想得到0.99,但是一些垃圾值被附加。我也继续在chrome浏览器的控制台日志中做了同样的操作,结果仍然一样。我附上了截图供参考。我需要的解决方案是0.0099*100,结果应该是0.99。因为我需要更高的精度,所以我不能应用round/toFixed
这是因为JavaScript内部强制转换为双重类型。由于浮点不准确,总是存在一定程度的噪声。这里有一些关于这个的
您可以使用
toFixed(x)
将其四舍五入,精度可以达到您想要的大小(或者JavaScript允许的大小)。它既与JavaScript无关,也与任何编程语言无关
这是因为从十进制浮点数到二进制表示的转换:这个过程最终会进入一个无限的过程,该过程必须被截断,因为可用于存储数字的位数有限(因此,计算机内存量有限)
签出转换,看看它告诉您在转换过程中有多少错误
正如他在回答中指出的那样,你可以使用toFixed(x)
对你的号码进行四舍五入,并清除垃圾