解决Javascript';s浮点算法

解决Javascript';s浮点算法,javascript,Javascript,我开始遇到小数的问题,这让我了解了整个浮点数学。我的问题是,什么是可行的解决方案 x = 0.1; y = 0.2; num = x + y; num = Math.round(num * 100) / 100; 或 这些都是100%可行的选择吗?就像我说的那样,再也不用担心同样的问题了?你推荐哪一个?或者你会推荐一种不同的解决方案吗?有没有理由使用一种解决方案而不是另一种?提前感谢您的帮助 编辑: 对不起,我没有说得更具体。我很满意它总是2位小数,因为这对我的项目来说不是问题。显然,如果你想

我开始遇到小数的问题,这让我了解了整个浮点数学。我的问题是,什么是可行的解决方案

x = 0.1;
y = 0.2;
num = x + y;
num = Math.round(num * 100) / 100;

这些都是100%可行的选择吗?就像我说的那样,再也不用担心同样的问题了?你推荐哪一个?或者你会推荐一种不同的解决方案吗?有没有理由使用一种解决方案而不是另一种?提前感谢您的帮助

编辑:
对不起,我没有说得更具体。我很满意它总是2位小数,因为这对我的项目来说不是问题。显然,如果你想要更多的小数,你会使用1000而不是100和toFixed(3),以此类推。我主要关心的是,上述两种解决方案是否100%可行,比如,我不必担心任何相同的问题?还有,你会推荐第一种解决方案还是第二种?还是另一个?因为我将在很多计算中大量使用一种方法。再次感谢您的帮助。

这不是JavaScript浮点实现的问题,或者如果您使用像toFixed这样的字符串格式函数(请明确它是返回的字符串表示,而不是其他数字格式),它不会消失。相反,这是浮点运算作为一个概念的固有属性——它具有可变精度,旨在接近某个范围内的值

如果希望值始终完全准确,唯一的解决方案是不使用浮点数。通常,这是通过使用整数来完成的,整数代表您正在处理的“整数”的某个分数(例如,便士/美分而不是英镑/欧元/美元,或者毫秒而不是秒)。或者,您可以找到执行定点运算的精确数学库,这样可以避免不精确,但性能会更差


如果您不介意不精确性慢慢累积的风险,您可以简单地使用格式化函数,在输出计算结果时仅以一定的精度显示。转换为具有固定精度的字符串然后再转换回数字没有什么意义,因为浮点实现可能仍然无法以完全精度表示该数字。

取决于您试图解决的问题原始问题是什么?可能重复:如果您处理的是货币问题(不能超过2个小数),您可以随时更改存储/操作数据的方式-1表示1美分,100表示1美元。之所以提到货币,是因为它是处理整数(美分)而不是小数(美元)的自然方式.您可以使用任何10的乘法器来获得正确的小数数。不过,浮点结果仍然会在乘法和除法中弹出,因此您仍然需要进行一些舍入。
x = 0.1;
y = 0.2;
num = x + y;
num = num.toFixed(2); 
num = Number(num);