System.Math.Round 方法 (Double, MidpointRounding)

方法描述

将双精度浮点值舍入为最接近的整数。 一个参数,指定当一个值正好处于另两个数中间时如何舍入这个值。

语法定义(C# System.Math.Round 方法 (Double, MidpointRounding) 的用法)

public static double Round(
	double value,
	MidpointRounding mode
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
value System-Double 要舍入的双精度浮点数。
mode System-MidpointRounding value 在两个数字之间时如何舍入的规范。
返回值 System.Double 最接近 value 的整数。 如果 value 是两个整数的中值,这两个整数一个为偶数,另一个为奇数,则 mode 确定返回两个整数中的哪一个。

提示和注释

如果在 value 中的第一个十进制数字为 5,也就是说处于数字和比该数字大一的值之间的中间位置,mode 参数控制如何 value 被舍入。 mode 可以具有下列两个值之一:

MidpointRounding.ToEven . 如果某数字为奇数,则它将更改为偶数。 否则,它保持不变。 此行为遵循 IEEE 标准 754 的第 4 节。 它有时称为就近舍入或四舍六入五成双。 它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。

MidpointRounding.AwayFromZero . 数值的数字始终四舍五入到下一个数字。 这是最常见的舍入方法。 它被称为对称算术舍入。

对调用者的说明

因为从表示十进制值为浮点数或执行浮点值上的算术运算导致的精度损失,所以在某些情况下 Round(Double, MidpointRounding) 方法可能不会出现圆点值接近的偶数整数。 在下面的示例中,由于浮点值 .1 没有有限的二进制表示形式,第一次用 11.5 值调用 Round(Double) 方法时得到的值为 11 而不是 12。

C#

VB

复制

using System;

public class Example

{

public static void Main()

{

double value = 11.1;

for (int ctr = 0; ctr <= 5; ctr++)

value = RoundValueAndAdd(value);

Console.WriteLine();

value = 11.5;

RoundValueAndAdd(value);

}

private static double RoundValueAndAdd(double value)

{

Console.WriteLine("{0} --> {1}", value, Math.Round(value,

MidpointRounding.AwayFromZero));

return value + .1;

}

}

// The example displays the following output:

// 11.1 --> 11

// 11.2 --> 11

// 11.3 --> 11

// 11.4 --> 11

// 11.5 --> 11

// 11.6 --> 12

//

// 11.5 --> 12

System.Math.Round 方法 (Double, 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)

*/

异常

异常 异常描述
ArgumentException mode 不是有效的 System.MidpointRounding 值。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.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 系统要求。