2017-10-09 102 views
-2

我有一些JavaScript用於計算包含總價值的表單字段的百分比折扣。Javascript百分比計算結果爲off

var thirteen = 10; 
 
var percent_discount = (thirteen) * 0.01; 
 
var percent_discount_final = (382.50 * (percent_discount)); 
 
console.log(percent_discount_final.toFixed(2));

計算是在38.24輸出??

這是爲什麼發生?

enter image description here

+1

嘗試'percent_discount_final = Math.round(某些表單字段的值*折扣百分比);' –

+0

這是行不通的。如果我的總數是382.50,而我計算的是10%,則顯示結果爲38.20 –

+1

'(10 * 0.01 * 382.50).toFixed(2)' - 在控制檯上返回38.25,剛剛嘗試過 –

回答

0

嗯,應該是滿值減去折扣 - 第三線是:

var percent_discount_final = value_of_some_form_field - (value_of_some_form_field * percent_discount); 
0

你幾乎想通了正確的乘數,但你忘了從1減去,所以你乘以0.1而不是0.9

下面是如何從數字中減去任何百分比的示例。

const subtractPercent = (value, percentage) => { 
    const multiplier = 1 - (percentage/100); 
    return value * multiplier; 
}; 

subtractPercent(250, 10); // 225 
subtractPercent(250, 3); // 242.5 

到你類似,此函數假定value爲正,爲簡單起見。負值將增加而不是減去。

subtractPercent(250, -10); // 275 
subtractPercent(-250, 10); // -225 
+0

謝謝。更改'var percent_discount =(十三)* .01;'到'var percent_discount =(十三)* 0.01;'解決了這個問題。 –

0

有趣的事實 - 浮點型不精確。它來自大數理論,並且通過設計它是近似的。這就是爲什麼幾種語言也會提供類似貨幣等類型的語言,而對於不具備這種語言的語言,我們會根據整數計算所有貨幣。它不是JavaScript相關的「錯誤」,它是計算機科學「功能」:)

如何計算整數的貨幣東西?好吧,你必須創建/模擬新的類型。總的想法是

  • 轉換從浮子的所有數據爲整數對整數也乘以100
  • 執行所有計算(沒有單個浮子可以混合使用,或者結果也將被轉換爲float)
  • 在結束(在大多數情況下,它的數據輸出/用戶界面)100

是劃分的每一個值,在21世紀,它看起來是傻瓜,但沒有魔法可以使用,當你的工具(JS)沒有用於貨幣計算的專用數據類型。你必須建立它。

JS是這個項目涉及的唯一語言嗎?如果有一些例如一些SQL數據庫,他們中的大多數都有專門的貨幣類型,所以您可以在數據庫端進行所有計算。