簡體   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