Math.Trunc 函数将该值减少 0.001 [重复]

Math.Trunc function reducing the value by 0.001 [duplicate]

提问人:Yash Padia 提问时间:11/14/2023 最后编辑:Yash Padia 更新时间:11/17/2023 访问量:37

问:

<div id="demo1"></div>
<div id="demo2"></div>

<script>
document.getElementById("demo1").innerHTML = (Math.trunc(1005)/1000).toFixed(3);
</script>
 
<!-- *The above usage gives the value as* **1.005** -->

<script>
document.getElementById("demo2").innerHTML = (Math.trunc(1.005*1000)/1000).toFixed(3);
</script>

<!-- *The next usage gives the value as* **1.004** -->

<script>
document.getElementById("demo3").innerHTML = (Math.trunc(1.004*1000)/1000).toFixed(3);
</script>

<!-- *The next usage gives the value again as* **1.004** -->

为什么会这样?

由于我使用的是 Math.Trunc(),因此在使用 toFixed() 函数后它应该呈现相同的值,但它的值正在减少。在此处输入图像描述

javascript 数学 截断 为固定

评论


答:

1赞 PyariBilli 11/14/2023 #1

第一个脚本(Math.trunc(1005)/1000).toFixed(3)

  • Math.trunc(1005)只需截断数字 1005,即 1005。
  • 然后,将 1005 除以 1000,得到 .1.005
  • toFixed(3)将其正确格式化为 ."1.005"

第二个脚本(Math.trunc(1.005*1000)/1000).toFixed(3)

  • 1.005 * 1000由于浮点精度错误,JavaScript 并不完全等于 1005。相反,它会产生一些稍微少的东西,比如 .1004.9999999999999
  • Math.trunc(1004.9999999999999)然后将其截断为 .1004
  • 将 1004 除以 1000 得到 .1.004
  • toFixed(3)将其正确格式化为 ."1.004"

评论

0赞 Yash Padia 11/17/2023
第三个脚本:(Math.trunc(1.004*1000)/1000).toFixed(3)) 1.004 * 1000 在 JavaScript 中返回 1004,因此这工作正常!明白了!谢谢!
0赞 Yash Padia 11/17/2023
如何避免这种情况并获得预期的结果?有什么方法吗?