在C#中,Math.Round 方法用于将数值舍入到最接近的整数或指定的小数位数。它提供了多种重载形式以适应不同的需求。下面是对 Math.Round 方法的详细解释。

方法签名

最基本的几种形式如下:


Csharp

深色版本

public static double Round(double a);
public static double Round(double value, int digits);
public static double Round(double value, int digits, MidpointRounding mode);
public static double Round(double value, MidpointRounding mode);
  • a 或 value: 要四舍五入的数字。
  • digits: 返回值中小数点后的位数。
  • mode: 指定如何处理位于两个数之间的中间值(如0.5),使用枚举类型 MidpointRounding

MidpointRounding 枚举

MidpointRounding 提供了两种方式来处理四舍五入过程中的“中间值”:

  • AwayFromZero: 当一个数字正好处于两个其他数字之间时,该方法会将其向远离零的方向舍入。(例如,1.5 舍入为 2,-1.5 舍入为 -2)
  • ToEven: 也称为“银行家舍入法”,当一个数字正好处于两个其他数字之间时,该方法倾向于选择偶数作为结果。(例如,1.5 和 2.5 都会被舍入为 2)

示例代码

基本用法

Csharp

深色版本

double result = Math.Round(3.44); // 结果为 3.0
double resultWithDigits = Math.Round(3.44, 1); // 结果为 3.4
使用 MidpointRounding

Csharp

深色版本

// AwayFromZero
double awayFromZeroResult = Math.Round(3.5, MidpointRounding.AwayFromZero); // 结果为 4.0
awayFromZeroResult = Math.Round(-3.5, MidpointRounding.AwayFromZero); // 结果为 -4.0

// ToEven
double toEvenResult = Math.Round(3.5, MidpointRounding.ToEven); // 结果为 4.0
toEvenResult = Math.Round(2.5, MidpointRounding.ToEven); // 结果为 2.0

注意事项

  • 默认情况下,如果没有指定 MidpointRounding 参数,Math.Round 使用的是 MidpointRounding.ToEven 规则。
  • 对于浮点数,由于它们的二进制表示方式,可能会导致一些预期之外的结果。因此,在处理货币等需要精确计算的情况下,推荐使用 decimal 类型而非 float 或 double
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐