System.MidpointRounding 枚举

方法描述

指定数学舍入方法应如何处理两个数字间的中间值。

语法定义(C# System.MidpointRounding 枚举 的用法)

[ComVisibleAttribute(true)]
public enum MidpointRounding

构造函数

构造函数名称 构造函数描述

成员/方法

方法名称 方法描述

提示和注释

使用带有适当的 Math.Round 重载的 MidpointRounding 可以更精确地控制舍入过程。

舍入运算以隐式精度或指定精度提取原始数字;检查下一个数字(其精度等于隐式进度或指定精度加一);并以与原始数字相同的精度返回与它最接近的数字。 对于正数,如果下一个数字是从 0 到 4 的数字,则最接近的数字朝向负无穷大。 如果下一个数字是从 6 到 9 的数字,则最接近的数字朝向正无穷大。 对于负数,如果下一个数字是从 0 到 4 的数字,则最接近的数字朝向正无穷大。 如果下一个数字是从 6 到 9 的数字,则最接近的数字朝向负无穷大。

在上述情况下,MidpointRounding 枚举不会影响舍入运算的结果。 但是,如果下一个数字是 5(即两个可能值的中间值),则最接近的数字并不明确。 在这种情况下,可以使用 MidpointRounding 枚举来指定舍入运算是返回与零最接近的数字还是返回最接近的偶数。

下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。 在舍入数字时所使用的精度是零,这意味着小数点之后的数字会影响舍入运算。 例如,对于数字 -2.5,小数点之后的数字是 5。 由于该数字是中间值,因此您可以使用 MidpointRounding 值来确定舍入结果。 如果指定了 AwayFromZero,则将返回 -3,因为它是精度为零且与零最接近的数字。 如果指定了 ToEven,则将返回 -2,因为它是精度为零的最接近的偶数。

原始数字

取绝对值较大的值

取偶数

3.5

4

4

2.8

3

3

2.5

3

2

2.1

2

2

-2.1

-2

-2

-2.5

-3

-2

-2.8

-3

-3

-3.5

-4

-4

System.MidpointRounding 枚举例子

下面的代码示例演示与 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)

*/

继承层次结构

命名空间

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

相关资源

System 命名空间
MSDN