JS浮点数精度之0.0003*10000不等于3
最近做了个控制DSP的上位机软件,采用electron+vue框架
上位机发送前会把数据*10000,DSP收到后会除10000。某天师兄反馈了一个Bug,软件中输入0.0003,按理说下位机应该收到3,结果老是收到2。
经过测试,发现这是javascript浮点数精度问题。在js中,小数的存储并不是精准的。输入如下代码
a=0.0003;
console.log(a*10000);
//会显示2.9999999999999996
而我在处理时直接使用parseInt()
取整处理了,这在最初定方案的时候由于*10000再取整,实际上可以精确到小数后四位,所以直接取整忽略第五位是可行的,谁能想到被浮点数精度埋伏了一手,这下第四位都不精确了。