2

我在用javascript四舍五入或四舍五入时遇到了这个问题。好吧,它完成了工作,但在某些情况下它无法正确完成工作。

例如。

价格为 0.30,折扣为 15%,结果应为 0.255 或 0.26。(这在某种程度上还可以)

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

尝试将此作为参考使用 toFixed(2) 和数学舍入来获得正确的舍入

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

有任何想法吗?

谢谢

这是我的初步测试。虽然这只是一个初始测试,但如果最后两位数字大于 5,我所做的检查然后将Math.ceil其应用于0.255to ,0.26但是当使用39.99结果时仍然39.99应该39.99使用Math.round,以便结果为40.

如果需要四舍五入或需要四舍五入,我想要完成的是能够向上或向下舍入任何数字。

更新

我能够解决我自己的问题。(至少对我的特定环境)

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

4

2 回答 2

2

这是因为浮动的处理方式。我建议您仅将原始数字设为整数,因此您可以从7999. 如果你使用这个方法,你会得到正确的结果。

一般来说,尤其是在处理金钱的时候,总是先以便士为单位工作,然后以货币的格式输出。

于 2013-03-08T00:11:27.500 回答
1

你可以试试:

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

基本上这会将小数点向右移动 2 位..

3673.27

然后将其四舍五入为 int

3673

然后将小数点左移 2 位

36.73
于 2013-03-08T00:03:30.297 回答