System.Math.Round 方法 (Double, Int32, MidpointRounding)
方法描述
将双精度浮点值按指定的小数位数舍入。 一个参数,指定当一个值正好处于另两个数中间时如何舍入这个值。
语法定义(C# System.Math.Round 方法 (Double, Int32, MidpointRounding) 的用法)
public static double Round( double value, int digits, MidpointRounding mode )
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
value | System-Double | 要舍入的双精度浮点数。 |
digits | System-Int32 | 返回值中的小数数字。 |
mode | System-MidpointRounding | value 在两个数字之间时如何舍入的规范。 |
返回值 | System.Double | 其小数数字等于 digits 的 value 的最接近的数字。 如果 value 的小数数字小于 digits,则返回的 value 保持不变。 |
提示和注释
digits 参数指定返回值中的小数位数以及范围 0 和 15。 如果 digits 等于零,则返回整数。
如果在 digits 小数位置右边的 value 中的第一个十进制数字为 5,也就是说 digits 位置的数字与下一个最高位之间的中间位置,mode 参数控制如何 value 被舍入。 mode 可具有下列两个值之一:
MidpointRounding.ToEven . 如果 digits 位置中的数字为奇数,它将更改为偶数数字。 否则,它保持不变。 此行为遵循 IEEE 标准 754 的第 4 节。 它有时称为就近舍入或四舍六入五成双。 它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。
MidpointRounding.AwayFromZero . digits 位置处的数字始终四舍五入到下一个数字。 这是最常见的舍入方法。 它被称为对称算术舍入。
可返回的整数和小数最大总位数为 15。 如果舍入的值包含 15 个以上的数字,则返回 15 个最重要的数字。 如果舍入的值包含的位数小于或等于 15,则返回整数位数和 digits 参数指定的小数位数。
对调用者的说明
因为从表示十进制值为浮点数或执行浮点值上的算术运算导致的精度损失,所以在某些情况下 Round(Double, Int32, MidpointRounding) 法可能不会按 mode 参数指定的来对中点值四舍五入。 如下面的示例所示,其中 2.135 将舍入为 2.13 而不是 2.14。 这是因为在内部该方法将 value 乘以10 *digits,并且乘法运算在这种情况下会损失精度。
C#
VB
复制
using System;
public class Example
{
public static void Main()
{
double[] values = { 2.125, 2.135, 2.145, 3.125, 3.135, 3.145 };
foreach (double value in values)
Console.WriteLine("{0} --> {1}", value,
Math.Round(value, 2, MidpointRounding.AwayFromZero));
}
}
// The example displays the following output:
// 2.125 --> 2.13
// 2.135 --> 2.13
// 2.145 --> 2.15
// 3.125 --> 3.13
// 3.135 --> 3.14
// 3.145 --> 3.15
System.Math.Round 方法 (Double, Int32, MidpointRounding)例子
尽管该代码示例对小数进行舍入,但 Round 方法以类似的方式对双精度浮点数进行舍入。
// This example demonstrates the Math.Round() method in conjunction // with the MidpointRounding enumeration. using System; class Sample { public static void Main() { decimal result = 0.0m; decimal posValue = 3.45m; decimal negValue = -3.45m; // By default, round a positive and a negative value to the nearest even number. // The precision of the result is 1 decimal place. result = Math.Round(posValue, 1); Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue); result = Math.Round(negValue, 1); Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue); Console.WriteLine(); // Round a positive value to the nearest even number, then to the nearest number away from zero. // The precision of the result is 1 decimal place. result = Math.Round(posValue, 1, MidpointRounding.ToEven); Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, posValue); result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero); Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, posValue); Console.WriteLine(); // Round a negative value to the nearest even number, then to the nearest number away from zero. // The precision of the result is 1 decimal place. result = Math.Round(negValue, 1, MidpointRounding.ToEven); Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, negValue); result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero); Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, negValue); Console.WriteLine(); } } /* This code example produces the following results: 3.4 = Math.Round( 3.45, 1) -3.4 = Math.Round(-3.45, 1) 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven) 3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero) -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven) -3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero) */
异常
异常 | 异常描述 |
---|---|
ArgumentOutOfRangeException | digits 小于 0 或大于 15。 |
ArgumentException | mode 不是有效的 System.MidpointRounding 值。 |
版本信息
.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。