如何解决js十进制运算中的十进制数
2023-11-25 00:25:35
和你分享一个有趣的测试。 0.1 + 0.2 = 0.3 / false 突然沮丧,好吗!0.1 + 0.2的结果是:0.3000000000000000 另一个2.4 0.8 = 2.9999999999999996不能被转换为整数(2.4×100)(0.8×100)。 10.22,现在我们要减去0.11的结果,出现大量的十进制10.110000000000001。然后我用固定的方法筛选的十进制数,但是我不知道执行的效率转换为整数后,让我们再试试。 VaR date1 =新的日期(); 对于(var i = 0;i < 10000;i + +){ VaR结果=(10.22 - 0.11),ToFixed(2); } 警报(新)-日期(日期1); / /低效率 VAR把=新日期(); 对于(var j=0;j<10000;j + +){ var 2 =(10.22×1000-0.11×1000)/ 1000; } 警报(新)-日期(日期2); / /效率高 警报(0.1 + 0.2 = 0.3); 警报(0.1 + 0.2);自0.3000000000000000起返回 警报(parseFloat(0.1)+ parseFloat(0.2)); / /返回0.3000000000000000 A number of data were found. 一个是Javascript浮点运算的错误,另一个是从计算机到二进制计算的转换。但是为什么不是所有小数都会有这样的现象呢。目前,我还不清楚。我有时间深入了解它。 uff1a解 解决这个问题有两种方法。第一是让N直接采用固定小数(n)方法的Javascript,但就我个人而言,认为会对数据的准确性有问题。如果数据精度不高,可。 警报((0.1 + 0.2)。ToFixed(1)); 第二种方法是编写算法,下面是自定义添加函数,可以添加这种方法来避免上述问题。 自定义添加操作 功能addnum(num1,num2){ VaR SQ1、SQ2、M; {试 SQ1 = num1.tostring()。分裂(,){ 1 }。长度; } catch(e){ SQ1 = 0; } {试 SQ2 = num2.tostring()。分裂(,){ 1 }。长度; } catch(e){ SQ2 = 0; } M = math.pow(10、Math.max(SQ1、SQ2)); 返回(num1 * M + num2×m)/ m; } 警报(addnum(0.1,0.2)); 当然,它可以简单地写为:警告((((民* 3 + 10 * 3)/ 3);所以没有N多位小数。 警报((数字* 3 + 10 * 3) 3)和警报(数字10);这两种计算机与底层计算机不同于二进制操作。也许这就是这些问题的原因。tag:运算 十进制数 十进制 如何解决 电脑软件
相关内容