【发布时间】:2012-04-22 05:44:13
【问题描述】:
我正在寻找一种按照以下规定四舍五入到最接近的美元的方法:
(如果 Wholenumber.50 及以上四舍五入到下一个整数)
(如果为 Wholenumber.49 及以下,则向下舍入为当前整数)
我试过了:
Math.Round(wholenumber.xx, MidpointRounding.ToEven);
这并不总是四舍五入,例如 1.5 = 2 和 2.5 = 2,因为它四舍五入到最接近的偶数。
我也试过了:
Math.Round(wholenumber.xx, MidpointRounding.AwayFromZero);
这总是四舍五入到较大的整数。
对于我正在尝试做的事情是否有任何内置功能,或者我是否需要编写自己的自定义方法来检查数字并根据 floor 或 ceil 进行操作?
【问题讨论】:
-
使用浮点运算来存储货币从来都不是一个好主意..
-
我认为你可以在没有第二个参数的情况下执行 Math.round 吗?这是您描述的默认舍入。
-
MidpointRounding.AwayRoundZero 就是您所描述的。这并不意味着对所有值进行四舍五入,仅对中点 (0.5) 进行四舍五入。
-
@Jack:使用浮点运算是完全可以接受的;你应该避免 binary 浮点运算。
decimal类型是浮点类型,它只是不是 binary 浮点类型。顾名思义,它是一个decimal浮点类型。 -
你没有说你想要负数发生什么。当您对负数说“向上取整”时,您是指幅度向上取整——远离零——还是值向上取整——向零取整?
标签: c# math rounding floor ceil