繁体   English   中英

我对 Javascript 十进制舍入有很大的问题

[英]I have a huge problem with Javascript decimal rounding

在做了很多环顾后,我不必描述编码社区中明显的精度问题。 但是,大多数解决方案都依赖于将数字转换为字符串。 就我而言,这不是一个选项,因为我使用的是 API ,它要求传入的数字很好......一个数字。 每次我得到不完美的精度时,API 都会发出一个错误,破坏我的应用程序的功能。 简单地捕获错误并不是真正的解决方案,因为我仍然必须提交值并且值不会改变。 这是我目前正在使用的,它似乎在大多数情况下都有效,但每隔一段时间我就不那么幸运了,如果有人知道如何解决这个问题,所有的评论都将不胜感激!

let rounded = Math.round((n + Number.EPSILON) * Math.round(Math.pow(10, precision))) / Math.round(Math.pow(10, precision))
let fixed = rounded.toFixed(precision)
return Number(fixed)

旁注,舍入和固定都可能导致相同的问题,我已经尝试过两种方式,所需的精度是 2 到 8 取决于具体情况,我也尝试过使用和不使用 EPSILON,我尝试过截断,四舍五入,似乎没有任何效果,我最后需要一个数字而不是字符串......

decimal.js

使用decimal.js进行精确的数学计算。 有类似的解决方案可用。
您的问题是关于在一般编程中使用浮点数的已知事实。

您可以在线找到有关 decimal.js 的更多帮助和教程。 看看: https://github.com/MikeMcl/decimal.js/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM