四舍五入到最接近的美元

本文关键字:美元 最接近 四舍五入 | 更新日期: 2023-09-27 18:30:45

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

我试过:

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

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

我也尝试过:

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

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

是否有任何内置功能可用于我正在尝试执行的操作,或者我是否需要编写自己的自定义方法来检查数字并执行基于地板或 ceil 的操作?

四舍五入到最接近的美元

首先,我注意到您应该始终使用此任务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