MidpointRounding Перечисление

Определение

Задает способ обработки чисел, которые равноудалены от двух соседних чисел, в математических методах округления.Specifies how mathematical rounding methods should process a number that is midway between two numbers.

public enum class MidpointRounding
public enum MidpointRounding
[System.Runtime.InteropServices.ComVisible(true)]
public enum MidpointRounding
type MidpointRounding = 
[<System.Runtime.InteropServices.ComVisible(true)>]
type MidpointRounding = 
Public Enum MidpointRounding
Наследование
MidpointRounding
Атрибуты

Поля

AwayFromZero 1

Режим округления до ближайшего числа. Когда число находится посредине между двумя другими числами, оно округляется до ближайшего к нулю числа.Round to nearest mode: when a number is halfway between two others, it is rounded toward the nearest number that is away from zero.

ToEven 0

Режим округления до ближайшего числа. Когда число находится посредине между двумя другими числами, оно округляется до ближайшего четного числа.Round to nearest mode: when a number is halfway between two others, it is rounded toward the nearest even number.

ToNegativeInfinity 3

Режим направленного округления. Число округляется в меньшую сторону до ближайшего результата, не большего, чем бесконечно точный результат.Directed mode: the number is rounded down, with the result closest to and no greater than the infinitely precise result.

ToPositiveInfinity 4

Режим направленного округления. Число округляется в большую сторону до ближайшего результата, не меньшего, чем бесконечно точный результат.Directed mode: the number is rounded up, with the result closest to and no less than the infinitely precise result.

ToZero 2

Режим направленного округления. Число округляется к нулю до ближайшего результата, не превышающего по порядку бесконечно точный результат.Directed mode: the number is rounded toward zero, with the result closest to and no greater in magnitude than the infinitely precise result.

Примеры

В следующем примере демонстрируется Math.Round метод в сочетании с MidpointRounding перечислением:The following example demonstrates the Math.Round method in conjunction with the MidpointRounding enumeration:

// This example demonstrates the Math.Round() method in conjunction 
// with the MidpointRounding enumeration.
using namespace System;

void main()
{
    Decimal result = (Decimal) 0.0;
    Decimal posValue = (Decimal) 3.45;
    Decimal negValue = (Decimal) -3.45;

    // 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)

*/
decimal result = 0.0m;
decimal positiveValue = 3.45m;
decimal negativeValue = -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(positiveValue, 1);
Console.WriteLine($"{result} = Math.Round({positiveValue}, 1)");
result = Math.Round(negativeValue, 1);
Console.WriteLine($"{result} = Math.Round({negativeValue}, 1)");
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(positiveValue, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({positiveValue}, 1, MidpointRounding.ToEven)");
result = Math.Round(positiveValue, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({positiveValue}, 1, MidpointRounding.AwayFromZero)");
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(negativeValue, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({negativeValue}, 1, MidpointRounding.ToEven)");
result = Math.Round(negativeValue, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({negativeValue}, 1, MidpointRounding.AwayFromZero)");
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)

*/
' This example demonstrates the Math.Round() method in conjunction 
' with the MidpointRounding enumeration.
Class Sample
    Public Shared Sub Main() 
        Dim result As Decimal = 0D
        Dim posValue As Decimal = 3.45D
        Dim negValue As Decimal = -3.45D
        
        ' 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()
    
    End Sub
End Class
'
'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)
'

Комментарии

Используйте MidpointRounding с соответствующими перегрузками Math.Round для предоставления большего контроля над процессом округления.Use MidpointRounding with appropriate overloads of Math.Round to provide more control of the rounding process.

Округлить до ближайшегоRound to nearest

Операция "цикл-к-ближайшей" принимает исходное число с неявной или заданной точностью; проверяет следующую цифру, которая находится в той же точности, что и единица. и возвращает ближайшее число с той же точностью, что и исходное число.A round-to-nearest operation takes an original number with an implicit or specified precision; examines the next digit, which is at that precision plus one; and returns the nearest number with the same precision as the original number. Для положительных чисел, если следующая цифра находится в направлении от 0 до 4, ближайшее число отдается отрицательной бесконечности.For positive numbers, if the next digit is from 0 through 4, the nearest number is toward negative infinity. Если следующая цифра — от 6 до 9, то ближайшее число будет в сторону положительной бесконечности.If the next digit is from 6 through 9, the nearest number is toward positive infinity. Для отрицательных чисел, если следующая цифра находится в направлении от 0 до 4, ближайшее число отдается плюс бесконечности.For negative numbers, if the next digit is from 0 through 4, the nearest number is toward positive infinity. Если следующая цифра — от 6 до 9, то ближайшее число будет в сторону отрицательной бесконечности.If the next digit is from 6 through 9, the nearest number is toward negative infinity.

В предыдущих случаях MidpointRounding.AwayFromZero и не влияет на MidpointRounding.ToEven результат операции округления.In the previous cases, the MidpointRounding.AwayFromZero and MidpointRounding.ToEven do not affect the result of the rounding operation. Однако если следующая цифра равна 5, то есть середина между двумя возможными результатами, а оставшиеся цифры равны нулю или нет оставшихся цифр, то ближайшее число неоднозначно.However, if the next digit is 5, which is the midpoint between two possible results, and all remaining digits are zero or there are no remaining digits, the nearest number is ambiguous. В этом случае в режиме «цикл по ближайшему» в MidpointRounding можно указать, будет ли операция округления возвращать ближайшее число от нуля или ближайшего четного числа.In this case, the round-to-nearest modes in MidpointRounding enable you to specify whether the rounding operation returns the nearest number away from zero or the nearest even number.

В следующей таблице показаны результаты округления некоторых отрицательных и положительных чисел в сочетании с режимами «округление до ближайшего числа».The following table demonstrates the results of rounding some negative and positive numbers in conjunction with round-to-nearest modes. Точность, используемая для округления чисел, равна нулю. Это означает, что число после десятичной запятой влияет на операцию округления.The precision used to round the numbers is zero, which means the number after the decimal point affects the rounding operation. Например, для числа 2,5 цифра после десятичной запятой — 5.For example, for the number -2.5, the digit after the decimal point is 5. Так как эта цифра является средней, можно использовать MidpointRounding значение для определения результата округления.Because that digit is the midpoint, you can use a MidpointRounding value to determine the result of rounding. Если AwayFromZero указан параметр, возвращается значение-3, так как это ближайшее число от нуля до точности, равной нулю.If AwayFromZero is specified, -3 is returned because it is the nearest number away from zero with a precision of zero. Если ToEven указан параметр, возвращается значение-2, так как оно является ближайшим четным числом с точностью до нуля.If ToEven is specified, -2 is returned because it is the nearest even number with a precision of zero.

Исходный номерOriginal number AwayFromZeroAwayFromZero ToEvenToEven
3.53.5 44 44
2.82.8 33 33
2.52.5 33 22
2.12.1 22 22
-2.1-2.1 -2-2 -2-2
-2.5-2.5 -3-3 -2-2
-2.8-2.8 -3-3 -3-3
-3.5-3.5 -4-4 -4-4

Направленное округлениеDirected rounding

Направленная операция округления принимает исходный номер с неявной или заданной точностью и возвращает следующее число, ближайшее к заранее определенному, с той же точностью, что и исходное число.A directed rounding operation takes an original number with an implicit or specified precision and returns the next number closest to some predefined one with the same precision as the original number. Направленные режимы MidpointRounding управления, к которым выполняется округление по предопределенному числу.Directed modes on MidpointRounding control toward which predefined number the rounding is performed.

В следующей таблице показаны результаты округления отрицательных и положительных чисел в сочетании с направленными режимами округления.The following table demonstrates the results of rounding some negative and positive numbers in conjunction with directed rounding modes. Точность, используемая для округления чисел, равна нулю, что означает, что операция округления повлияет на число до десятичной запятой.The precision used to round the numbers is zero, which means the number before the decimal point is affected by the rounding operation.

Исходный номерOriginal number тонегативеинфинитиToNegativeInfinity топоситивеинфинитиToPositiveInfinity тозероToZero
2.82.8 22 33 22
2.52.5 22 33 22
2.12.1 22 33 22
-2.1-2.1 -3-3 -2-2 -2-2
-2.5-2.5 -3-3 -2-2 -2-2
-2.8-2.8 -3-3 -2-2 -2-2

Применяется к