2013-03-07 80 views
2

我有用四舍五入或四舍五入的javascript的问题。那么它会完成这项工作,但有些情况下,它无法正确完成工作。在javascript中四舍五入或四舍五入的更好的方法

例如。

价格为0.30,如果有15%的折扣,结果应该是0.255或0.26。 (这是某种程度上没关系)

价格是79.99,50%的折扣应该有40个结果。 (实际结果是39.995)

以此为参考Using toFixed(2) and math round to get correct rounding

也做了这个过程Math.round(value*Math.pow(10,dec))/Math.pow(10,dec);

任何想法试过吗?

谢谢

这是我的初步测试。虽然这只是一个最初的测试什么,如果最后两位数是我没被选中大于5然后申请Math.ceil将在0.2550.26但使用39.99时,结果仍然是39.99虽然39.99应该使用Math.round从而使结果将是40

我想完成的是如果需要四舍五入或需要四舍五入,可以将任意数字舍入或舍入。

UPDATE

我能解决我自己的问题。 (ATLEAST我的特定环境)

http://jsfiddle.net/xMj3M/4/

+3

我不明白你的问题,你想达到什么程度的准确性?您首先需要精确到小数点后两位,第二位是小数点后一位 – 2013-03-07 23:54:28

+0

@Benjamin Gruenbaum:在这两种情况下,它都是四舍五入到小数点后两位 – zerkms 2013-03-07 23:59:06

+0

这应该回答您的问题,精确到小数点后两位: http://stackoverflow.com/questions/5191088/how-to-round-up-a-number-in-javascript – 2013-03-08 00:05:24

回答

1

你可以尝试:

var someNumber = 36.7327; 
var someNumberRoundedTo2Decimals = (Math.round((someNumber * 100))/100); 
// = 36.73 

基本上是这样的移动小数点向右2位数..

3673.27 

然后四舍五入它关闭到一个int

3673 

然后移动小数点回到左边2个地方

36.73 
+0

这不是OP已经在做什么,这不工作,并提出了问题? – 2013-03-08 00:22:17

+0

可能(尽管'dec'没有定义,所以我只能假设OP使用了'2') – scunliffe 2013-03-08 00:33:10

2

这是因为彩车的处理方式。我建议只用整数表示你的原始数字,所以你应该从7999开始。如果你使用这种方法,你会得到正确的结果。

一般来说,尤其是在处理金钱问题时,首先以便士的方式工作然后以货币格式输出它总是一个好主意。