gpt4 book ai didi

javascript - 在javascript中添加浮点值

转载 作者:行者123 更新时间:2023-11-30 12:48:47 25 4
gpt4 key购买 nike

我遇到了条件 0.1 + 0.2 !== 0.3 的问题。我尝试了 0.0001 + 0.0002,但这不等于 0.03。据我所知,我们可以使用toFixed 来解决这个问题。但是有什么解决方案可以动态解决这个问题吗?因为对于 0.1 + 0.2 我们使用 toFixed(2)0.0001 + 0.0002 使用 toFixed(4)

最佳答案

您可以扩展 Math 以包含一个函数来进行数学运算。下面采用两个 float ,确定最大小数位数,然后基于此进行数学运算,然后使用最大小数位数执行 toFixed。

Math.addFloats = function (f1,f2){
//Helper function to find the number of decimal places
function findDec(dec){
var count = 0;
while(dec%1){
dec*=10;
count++;
}
return count;
}
//Determine the greatest number of decimal places
var dec1 = findDec(f1);
var dec2 = findDec(f2);
var fixed = dec1>dec2 ? dec1 : dec2;

//do the math then do a toFixed, could do a toPrecision also
var n = (f1+f2).toFixed(fixed);
return +n;
}
console.log( Math.addFloats(0.1,0.2) == 0.3 ); //evaluates to true
console.log( Math.addFloats(1/3,1/7) ); //prints 0.47619047619047616
console.log( 1/3 + 1/7 ); //prints 0.47619047619047616

还没有完全测试它,但做一些初步测试表明它动态工作,可能会修改它来做其他数学,但在做除法/乘法等时可能必须改变小数计数检查

注意:对于 e 符号,这似乎不能很好地计算小数位数,即 2e-14 结果像 30,而它应该是 14

编辑:将 findDec 函数更改为 this answers version寻找小数位数的方法似乎更有助于确定不同类型数字的正确小数位数

   function findDec(f1){
function isInt(n){
return typeof n === 'number' &&
parseFloat(n) == parseInt(n, 10) && !isNaN(n);
}
var a = Math.abs(f1);
f1 = a, count = 1;
while(!isInt(f1) && isFinite(f1)){
f1 = a * Math.pow(10,count++);
}
return count-1;
}

关于javascript - 在javascript中添加浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21693013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com