iT邦幫忙

1

JavaScript計算問題

目前遇到的問題是
我現在總價格 5000 折扣80%
我在計算折扣的時候

總價格 
var discount = 5000 * ( 1 - 80 / 100 ) 
//discount 的值是 999.9999999999998
var discount1 = 5000 * 20 / 100
//discount 的值是 1000

是甚麼原因造成這個現象
另外可以只用第一個算式去處理就好嗎
還是要先 100-使用者給的折扣值 在去計算才可以

看更多先前的討論...收起先前的討論...
xSummer iT邦新手 4 級 ‧ 2020-07-27 13:30:11 檢舉
我不久前也有遇過相似問題 https://ithelp.ithome.com.tw/questions/10198904
咖咖拉 iT邦研究生 5 級 ‧ 2020-07-27 13:32:25 檢舉
好奇怪....

不過這可以用四捨五入來校正
Math.round(discount);
dragonH iT邦超人 5 級 ‧ 2020-07-27 13:34:45 檢舉
https://juejin.im/post/5b90e00e6fb9a05cf9080dff

xWinter 貼的那篇回答看完應該就懂了
柯柯 iT邦新手 5 級 ‧ 2020-07-27 13:44:18 檢舉
大致了解問題了 謝謝大家
我還是換個方式寫好了
畢竟是下單系統 算折扣的問題要嚴僅一點
fillano iT邦超人 1 級 ‧ 2020-07-27 14:00:13 檢舉
把計算調整一下,先展開,然後盡量先乘後除,可以稍微避開問題。例如:
5000 * (1 - 80 / 100) => 5000 - 5000 * 80 / 100 計算出來就是1000

實務上,應該都可以找到一些程式庫專門用來解決這類計算問題的。
froce iT邦大師 1 級 ‧ 2020-07-27 15:42:19 檢舉
> 畢竟是下單系統 算折扣的問題要嚴僅一點

下單系統,請做前後端驗證。
建議可以前端送數量和品項,後端算折扣後返回,這樣可以偷一次工。
真要在前端做的話就純顯示。

浮點數精確值問題請用:
https://github.com/MikeMcl/decimal.js/

1 個回答

4
archer9080
iT邦新手 4 級 ‧ 2020-07-27 13:33:30
最佳解答

javascript小數計算溢位問題
Number 數值
以我自己來說,通常都是先轉成浮點數,再利用數學庫進行計算

如有誤會或錯誤,再麻煩前輩輕鞭:D

我要發表回答

立即登入回答