JS-使用toFixed转换并返回不同的数字

时间:2018-10-05 21:01:24

标签: math floating-point floating-accuracy

我正在使用JS从输入框转换数字。我正在使用.toFixed(2)来截断数字,但是当我转换回来时,它现在可以工作了。

示例:原始输入值为100

然后我使用公式将bbl转换为m3:

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
newConvertedVal = parseFloat((oldVal * 0.1589873).toFixed(2));
jQuery(this).val(newConvertedVal);

这很好,我得到了5.90的结果

但是,当我转换回来时,使用相反的公式:

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
newConvertedVal = parseFloat((oldVal / 0.1589873).toFixed(2));
jQuery(this).val(newConvertedVal);

但是当我转换回来时,我得到100.01

里面有额外的.01。

我不想四舍五入,因为在某些情况下,准确地转换可能会要求数字为浮点数。有没有更好的方法可以完全转换回去?

1 个答案:

答案 0 :(得分:1)

如果“精确转换”,则表示您想要在一个方向上乘以.1589873的结果,并四舍五入到最接近的100 th ,然后在相反方向上进行转换的结果用.1589873除以产生原始输入,这是不可能的。

舍入到最接近的第100个 会丢弃信息。特别是,转换会将一些不同的数字映射到一个结果。

例如,考虑同时转换100和100.01:

  • 100•.1589873 = 15.89873。四舍五入到最接近的.01将产生15.90。
  • 100.01•.1589873 = 15.900319873。四舍五入到最接近的.01将产生15.90。

因此,从转换结果15.90无法确定原始输入是100还是100.01。没有任何计算绝对可以得出正确的答案。