Decimal.Round 方法

多載

 Round(Decimal, Int32, MidpointRounding) 使用指定的進位策略，將十進位值四捨五入至指定的有效位數。 Round(Decimal, MidpointRounding) 使用指定的進位策略，將十進位值四捨五入為整數。 Round(Decimal) 將十進位值四捨五入為最接近的整數。 Round(Decimal, Int32) 將 Decimal 值捨入為指定的小數位數。

Round(Decimal, Int32, MidpointRounding)

Decimal.cs

Decimal.cs

Decimal.cs

public:
static System::Decimal Round(System::Decimal d, int decimals, MidpointRounding mode);
public:
static System::Decimal Round(System::Decimal d, int decimals, MidpointRounding mode) = System::Numerics::IFloatingPoint<System::Decimal>::Round;
public static decimal Round (decimal d, int decimals, MidpointRounding mode);
static member Round : decimal * int * MidpointRounding -> decimal
Public Shared Function Round (d As Decimal, decimals As Integer, mode As MidpointRounding) As Decimal

d
Decimal

decimals
Int32

mode
MidpointRounding

例外狀況

decimals 小於 0 或大於 28。

mode 不是 MidpointRounding 值。

範例

decimal result;

// Round a positive value using different strategies.
// The precision of the result is 1 decimal place.

result = Math.Round(3.45m, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.ToEven)"); result = Math.Round(3.45m, 1, MidpointRounding.AwayFromZero); Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.AwayFromZero)");
result = Math.Round(3.47m, 1, MidpointRounding.ToZero);
Console.WriteLine($"{result} = Math.Round({3.47m}, 1, MidpointRounding.ToZero)\n"); // Round a negative value using different strategies. // The precision of the result is 1 decimal place. result = Math.Round(-3.45m, 1, MidpointRounding.ToEven); Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.ToEven)");
result = Math.Round(-3.45m, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.AwayFromZero)"); result = Math.Round(-3.47m, 1, MidpointRounding.ToZero); Console.WriteLine($"{result} = Math.Round({-3.47m}, 1, MidpointRounding.ToZero)\n");

/*
This code example produces the following results:

3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
3.4 = Math.Round(3.47, 1, MidpointRounding.ToZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
-3.4 = Math.Round(-3.47, 1, MidpointRounding.ToZero)
*/

// Round a positive value using different strategies.
// The precision of the result is 1 decimal place.

let result = Math.Round(3.45m, 1, MidpointRounding.ToEven)
printfn $"{result} = Math.Round({3.45m}, 1, MidpointRounding.ToEven)" let result = Math.Round(3.45m, 1, MidpointRounding.AwayFromZero) printfn$"{result} = Math.Round({3.45m}, 1, MidpointRounding.AwayFromZero)"
let result = Math.Round(3.47m, 1, MidpointRounding.ToZero)
printfn $"{result} = Math.Round({3.47m}, 1, MidpointRounding.ToZero)\n" // Round a negative value using different strategies. // The precision of the result is 1 decimal place. let result = Math.Round(-3.45m, 1, MidpointRounding.ToEven) printfn$"{result} = Math.Round({-3.45m}, 1, MidpointRounding.ToEven)"
let result = Math.Round(-3.45m, 1, MidpointRounding.AwayFromZero)
printfn $"{result} = Math.Round({-3.45m}, 1, MidpointRounding.AwayFromZero)" let result = Math.Round(-3.47m, 1, MidpointRounding.ToZero) printfn$"{result} = Math.Round({-3.47m}, 1, MidpointRounding.ToZero)\n"

// This code example produces the following results:

// 3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
// 3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
// 3.4 = Math.Round(3.47, 1, MidpointRounding.ToZero)

// -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
// -3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
// -3.4 = Math.Round(-3.47, 1, MidpointRounding.ToZero)

Dim result As Decimal = 0D
Dim posValue As Decimal = 3.45D
Dim negValue As Decimal = -3.45D

' Round a positive value using different strategies.
' 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)
result = Math.Round(posValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
result, posValue)
Console.WriteLine()

' Round a negative value using different strategies.
' 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)
result = Math.Round(negValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
result, negValue)
Console.WriteLine()

'This code example produces the following results:
'
'        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.ToZero)
'
'        -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.ToZero)
'


Round(Decimal, MidpointRounding)

Decimal.cs

Decimal.cs

Decimal.cs

public:
static System::Decimal Round(System::Decimal d, MidpointRounding mode);
public:
static System::Decimal Round(System::Decimal d, MidpointRounding mode) = System::Numerics::IFloatingPoint<System::Decimal>::Round;
public static decimal Round (decimal d, MidpointRounding mode);
static member Round : decimal * MidpointRounding -> decimal
Public Shared Function Round (d As Decimal, mode As MidpointRounding) As Decimal

d
Decimal

mode
MidpointRounding

例外狀況

mode 不是 MidpointRounding 值。

範例

Console.WriteLine($"{"Value",-10} {"Default",-10} {"ToEven",-10} {"AwayFromZero",-15} {"ToZero",-15}"); for (decimal value = 12.0m; value <= 13.0m; value += 0.1m) Console.WriteLine($"{value,-10} {Math.Round(value),-10} " +
$"{Math.Round(value, MidpointRounding.ToEven),-10} " +$"{Math.Round(value, MidpointRounding.AwayFromZero),-15} " +
$"{Math.Round(value, MidpointRounding.ToZero),-15}"); // The example displays the following output: // Value Default ToEven AwayFromZero ToZero // 12.0 12 12 12 12 // 12.1 12 12 12 12 // 12.2 12 12 12 12 // 12.3 12 12 12 12 // 12.4 12 12 12 12 // 12.5 12 12 13 12 // 12.6 13 13 13 12 // 12.7 13 13 13 12 // 12.8 13 13 13 12 // 12.9 13 13 13 12 // 13.0 13 13 13 13  printfn$"""{"Value",-10} {"Default",-10} {"ToEven",-10} {"AwayFromZero",-15} {"ToZero",-15}"""
for value in 12m .. 0.1m .. 13m do
printfn "%-10O %-10O %-10O %-15O %-15O"
value
(Math.Round value)
(Math.Round(value, MidpointRounding.ToEven))
(Math.Round(value, MidpointRounding.AwayFromZero))
(Math.Round(value, MidpointRounding.ToZero))

// The example displays the following output:
//       Value      Default    ToEven     AwayFromZero    ToZero
//       12.0       12         12         12              12
//       12.1       12         12         12              12
//       12.2       12         12         12              12
//       12.3       12         12         12              12
//       12.4       12         12         12              12
//       12.5       12         12         13              12
//       12.6       13         13         13              12
//       12.7       13         13         13              12
//       12.8       13         13         13              12
//       12.9       13         13         13              12
//       13.0       13         13         13              13

Console.WriteLine("{0,-10} {1,-10} {2,-10} {3,-15} {4,-15}", "Value", "Default",
"ToEven", "AwayFromZero", "ToZero")
For value As Decimal = 12D To 13D Step 0.1D
Console.WriteLine("{0,-10} {1,-10} {2,-10} {3,-15} {4,-15}",
value, Math.Round(value),
Math.Round(value, MidpointRounding.ToEven),
Math.Round(value, MidpointRounding.AwayFromZero),
Math.Round(value, MidpointRounding.ToZero))
Next

' The example displays the following output:
'       Value      Default    ToEven     AwayFromZero     ToZero
'       12         12         12         12               12
'       12.1       12         12         12               12
'       12.2       12         12         12               12
'       12.3       12         12         12               12
'       12.4       12         12         12               12
'       12.5       12         12         13               12
'       12.6       13         13         13               12
'       12.7       13         13         13               12
'       12.8       13         13         13               12
'       12.9       13         13         13               12
'       13.0       13         13         13               13


Round(Decimal)

Decimal.cs

Decimal.cs

Decimal.cs

public:
static System::Decimal Round(System::Decimal d);
public:
static System::Decimal Round(System::Decimal d) = System::Numerics::IFloatingPoint<System::Decimal>::Round;
public static decimal Round (decimal d);
static member Round : decimal -> decimal
Public Shared Function Round (d As Decimal) As Decimal

d
Decimal

範例

using System;

public class Example
{
public static void Main()
{
for (decimal value = 100m; value <= 102m; value += .1m)
Console.WriteLine("{0} --> {1}", value, Decimal.Round(value));
}
}
// The example displays the following output:
//     100 --> 100
//     100.1 --> 100
//     100.2 --> 100
//     100.3 --> 100
//     100.4 --> 100
//     100.5 --> 100
//     100.6 --> 101
//     100.7 --> 101
//     100.8 --> 101
//     100.9 --> 101
//     101.0 --> 101
//     101.1 --> 101
//     101.2 --> 101
//     101.3 --> 101
//     101.4 --> 101
//     101.5 --> 102
//     101.6 --> 102
//     101.7 --> 102
//     101.8 --> 102
//     101.9 --> 102
//     102.0 --> 102

open System

for value in 100m .. 0.1m .. 102m do
printfn $"{value} --> {Decimal.Round value}" // The example displays the following output: // 100 --> 100 // 100.1 --> 100 // 100.2 --> 100 // 100.3 --> 100 // 100.4 --> 100 // 100.5 --> 100 // 100.6 --> 101 // 100.7 --> 101 // 100.8 --> 101 // 100.9 --> 101 // 101.0 --> 101 // 101.1 --> 101 // 101.2 --> 101 // 101.3 --> 101 // 101.4 --> 101 // 101.5 --> 102 // 101.6 --> 102 // 101.7 --> 102 // 101.8 --> 102 // 101.9 --> 102 // 102.0 --> 102  Module Example Public Sub Main() For value As Decimal = 100d To 102d Step .1d Console.WriteLine("{0} --> {1}", value, Decimal.Round(value)) Next End Sub End Module ' The example displays the following output: ' 100 --> 100 ' 100.1 --> 100 ' 100.2 --> 100 ' 100.3 --> 100 ' 100.4 --> 100 ' 100.5 --> 100 ' 100.6 --> 101 ' 100.7 --> 101 ' 100.8 --> 101 ' 100.9 --> 101 ' 101.0 --> 101 ' 101.1 --> 101 ' 101.2 --> 101 ' 101.3 --> 101 ' 101.4 --> 101 ' 101.5 --> 102 ' 101.6 --> 102 ' 101.7 --> 102 ' 101.8 --> 102 ' 101.9 --> 102 ' 102.0 --> 102  備註 此方法的行為遵循 IEEE Standard 754 第 4 節。 這種捨入有時稱為四捨五入 到偶 數或 銀行者的捨入。 它會將單一方向中點值持續四捨五入所產生的進位錯誤降到最低。 它相當於使用 modeMidpointRounding.ToEven自變數呼叫 Round(Decimal, MidpointRounding) 方法。 另請參閱 適用於 Round(Decimal, Int32) 來源: Decimal.cs 來源: Decimal.cs 來源: Decimal.cs Decimal 值捨入為指定的小數位數。 public: static System::Decimal Round(System::Decimal d, int decimals); public: static System::Decimal Round(System::Decimal d, int decimals) = System::Numerics::IFloatingPoint<System::Decimal>::Round; public static decimal Round (decimal d, int decimals); static member Round : decimal * int -> decimal Public Shared Function Round (d As Decimal, decimals As Integer) As Decimal 參數 d Decimal 要捨入的十進位數字。 decimals Int32 從 0 到 28 的值，這個值指定要捨入到的小數位數。 傳回 等於四捨五 d 入至 decimals 小數位數的小數字數。 實作 例外狀況 decimals 不是從 0 到 28 的值。 範例 下列範例會使用 Round 方法，將數個值四捨五Decimal入至指定的小數字數。 using System; class Example12 { public static void Main() { // Define a set of Decimal values. decimal[] values = { 1.45m, 1.55m, 123.456789m, 123.456789m, 123.456789m, -123.456m, new Decimal(1230000000, 0, 0, true, 7 ), new Decimal(1230000000, 0, 0, true, 7 ), -9999999999.9999999999m, -9999999999.9999999999m }; // Define a set of integers to for decimals argument. int[] decimals = { 1, 1, 4, 6, 8, 0, 3, 11, 9, 10}; Console.WriteLine("{0,26}{1,8}{2,26}", "Argument", "Digits", "Result" ); Console.WriteLine("{0,26}{1,8}{2,26}", "--------", "------", "------" ); for (int ctr = 0; ctr < values.Length; ctr++) Console.WriteLine("{0,26}{1,8}{2,26}", values[ctr], decimals[ctr], Decimal.Round(values[ctr], decimals[ctr])); } } // The example displays the following output: // Argument Digits Result // -------- ------ ------ // 1.45 1 1.4 // 1.55 1 1.6 // 123.456789 4 123.4568 // 123.456789 6 123.456789 // 123.456789 8 123.456789 // -123.456 0 -123 // -123.0000000 3 -123.000 // -123.0000000 11 -123.0000000 // -9999999999.9999999999 9 -10000000000.000000000 // -9999999999.9999999999 10 -9999999999.9999999999  open System // Define a set of Decimal values. let values = [ 1.45m; 1.55m; 123.456789m; 123.456789m 123.456789m; -123.456m Decimal(1230000000, 0, 0, true, 7uy) Decimal(1230000000, 0, 0, true, 7uy) -9999999999.9999999999m -9999999999.9999999999m ] // Define a set of integers to for decimals argument. let decimals = [ 1; 1; 4; 6; 8; 0; 3; 11; 9; 10 ] printfn$"""{"Argument",26}{"Digits",8}{"Result",26}"""
printfn $"""{"--------",26}{"------",8}{"------",26}""" for i = 0 to values.Length - 1 do printfn$"{values[i],26}{decimals[i],8}{Decimal.Round(values[i], decimals[i]),26}"

// The example displays the following output:
//                   Argument  Digits                    Result
//                   --------  ------                    ------
//                       1.45       1                       1.4
//                       1.55       1                       1.6
//                 123.456789       4                  123.4568
//                 123.456789       6                123.456789
//                 123.456789       8                123.456789
//                   -123.456       0                      -123
//               -123.0000000       3                  -123.000
//               -123.0000000      11              -123.0000000
//     -9999999999.9999999999       9    -10000000000.000000000
//     -9999999999.9999999999      10    -9999999999.9999999999

Public Module Example
Public Sub Main()
' Define a set of Decimal values.
Dim values() As Decimal = { 1.45d, 1.55d, 123.456789d, 123.456789d,
123.456789d, -123.456d,
New Decimal(1230000000, 0, 0, true, 7 ),
New Decimal(1230000000, 0, 0, true, 7 ),
-9999999999.9999999999d,
-9999999999.9999999999d }
' Define a set of integers to for decimals argument.
Dim decimals() As Integer = { 1, 1, 4, 6, 8, 0, 3, 11, 9, 10}

Console.WriteLine("{0,26}{1,8}{2,26}",
"Argument", "Digits", "Result" )
Console.WriteLine("{0,26}{1,8}{2,26}",
"--------", "------", "------" )
For ctr As Integer = 0 To values.Length - 1
Console.WriteLine("{0,26}{1,8}{2,26}",
values(ctr), decimals(ctr),
Decimal.Round(values(ctr), decimals(ctr)))
Next
End Sub
End Module
' The example displays the following output:
'                   Argument  Digits                    Result
'                   --------  ------                    ------
'                       1.45       1                       1.4
'                       1.55       1                       1.6
'                 123.456789       4                  123.4568
'                 123.456789       6                123.456789
'                 123.456789       8                123.456789
'                   -123.456       0                      -123
'               -123.0000000       3                  -123.000
'               -123.0000000      11              -123.0000000
'     -9999999999.9999999999       9    -10000000000.000000000
'     -9999999999.9999999999      10    -9999999999.9999999999