2

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

我努力了:

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

这并不总是四舍五入,例如 1.5 = 2 和 2.5 = 2 因为它四舍五入到最接近的偶数。

我也试过:

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

这总是四舍五入到更高的整数。

我正在尝试做的事情是否有任何内置功能,或者我是否需要编写自己的自定义方法来检查数字并根据地板或天花板做地板或天花板?

4

1 回答 1

12

首先,我注意到您应该始终decimal用于此任务;从不使用double. 如果您正在使用double,请立即停止您正在做的事情并修复您的程序,以便您停止使用专为物理问题设计的类型并开始使用专为金钱问题设计的类型来解决您的金钱问题。

第二,你说的完全是错误的

这总是四舍五入到更高的整数。

它不是。它四舍五入到最接近的整数,如果因为您处于中点而没有最接近的整数,那么它会选择离零较远的整数。

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

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
于 2012-04-09T21:46:41.200 回答