舍入到最近的美元

时间:2012-04-09 21:35:19

标签: c# math rounding floor ceil

我正在寻找一种方法,用以下规定四舍五入到最接近的美元:
(如果全数50以上,则为下一个整数) (如果全数49及以下舍入到当前整数)

我试过了:

Math.Round(wholenumber.xx, MidpointRounding.ToEven);

这并不总是如我想要的那样例如1.5 = 2和2.5 = 2,因为它舍入到最接近的偶数。

我也尝试过:

Math.Round(wholenumber.xx, MidpointRounding.AwayFromZero);

这总是向更高的整数。

我正在尝试做什么内置功能,还是需要编写自己的自定义方法来检查数字并根据地板或天花板进行操作?

1 个答案:

答案 0 :(得分:11)

首先,我注意到你应该始终使用decimal来执行此任务;永远不要使用double。如果您正在使用double,请立即停止正在执行的操作并修复程序,以便停止使用为 physics 设计的类型并开始使用为 money设计的类型解决您的资金问题的问题。

其次,当你说

时,你完全错了
  

这总是向更高的整数。

没有。它舍入到最接近的整数,如果因为你处于中点没有最接近的整数,那么它选择远离零的整数。

试试看,如果你不相信我:

using System;
class P
{
  static void Main()
  {
    decimal buckFifty = 1.50m;
    decimal buckFortyNine = 1.49m;
    Console.WriteLine(Math.Round(buckFortyNine, MidpointRounding.AwayFromZero));
    Console.WriteLine(Math.Round(buckFifty, MidpointRounding.AwayFromZero));
    Console.WriteLine(Math.Round(-buckFortyNine, MidpointRounding.AwayFromZero));
    Console.WriteLine(Math.Round(-buckFifty, MidpointRounding.AwayFromZero));
  }
}

结果

1
2
-1
-2