2017-10-09 227 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数据库,他们中的大多数都有专门的货币类型,所以您可以在数据库端进行所有计算。