开发者问题收集

在 javascript 中更好的四舍五入方法

2013-03-07
267

我在使用 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.255 变为 0.26 ,但是当使用 39.99 时,结果仍然是 39.99 ,尽管 39.99 应该使用 Math.round ,这样结果将是 40

我想要实现的是能够在需要向上舍入或需要向上舍入时对任何数字进行向上舍入或向下舍入。

更新

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

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

2个回答

这是因为浮点数的处理方式。我建议只将原始数字设置为整数,因此您可以从 7999 开始。如果您使用此方法,您将获得正确的结果。

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

Niet the Dark Absol
2013-03-08

您可以尝试:

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

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

3673.27

然后将其四舍五入为整数

3673

然后将小数点向左移动 2 位

36.73
scunliffe
2013-03-08