簡體   English   中英

Javascript:四舍五入到小數點后兩位

[英]Javascript: Rounding up to 2 decimal places

我正在嘗試將 Javascript 中的數字四舍五入到兩位小數。 我查閱了以下 Stack Overflow 帖子以獲取指導:

四舍五入至小數點后 2 位(僅在必要時)

現在,在那篇文章中,似乎有兩種方法可以做到這一點。 一個是toFixed(2) ,另一個是Math.round((num + Number.EPSILON) * 100) / 100 ,后者似乎是最被接受的方法。

因此,鑒於數字249.025 ,這是有效的。 兩種方法249.03按預期產生249.03 然而,給定數字294.025 (翻轉49 ),兩種方法都失敗,並產生294.02

這是一個 JSFiddle 來演示: https ://jsfiddle.net/uj8x4khn/

我的問題:是否有一種舍入方法適用於這兩個數字(和任何數字)?

也很好奇:為什么它適用於一個數字而不是一個非常相似的數字?

原因是 294.025 不完全是294.025,而是略小一些,因為浮點數不能精確表示該數字。 你會注意到,當你乘以 100 時,它甚至不顯示為 29402.5,而是顯示為 29402.499999999999

解決這個問題的最好方法是只進行整數運算。 如果您使用貨幣單位,請以美分計算所有內容,而不是以貨幣的主要單位計算。 如果您使用 4 位小數,則從整數開始,並將整數的 4 個最低有效數字表示為小數部分。 只有當您真正想要顯示它時,才將其除以適當的 10 次冪。但永遠不要存儲該結果以供進一步計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM