如何解决js十进制运算中的十进制数
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);这两种计算机与底层计算机不同于二进制操作。也许这就是这些问题的原因。