비고
이 문서는 이 API에 대한 참조 설명서를 보충하는 추가 설명을 제공합니다.
값 형식은 Decimal 양의 79,228,162,514,264,337,593,543,950,335에서 음의 79,228,162,514,264,337,593,543,950,335까지의 소수 숫자를 나타냅니다. 기본값은 Decimal 0입니다. 값 형식은 Decimal 많은 수의 정수 및 소수 자릿수가 필요하고 반올림 오류가 없는 재무 계산에 적합합니다.
Decimal 형식은 반올림의 필요성을 없애지 않습니다. 대신 반올림으로 인한 오류를 최소화합니다. 예를 들어 다음 코드는 1이 아닌 0.9999999999999999999999999999999999999999의 결과를 생성합니다.
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);
let dividend = Decimal.One
let divisor = 3m
// The following displays 0.9999999999999999999999999999 to the console
printfn $"{dividend/divisor * divisor}"
Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor)
나누기 및 곱셈의 결과가 메서드에 Round 전달되면 다음 코드와 같이 정밀도가 손실되지 않습니다.
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2));
let dividend = Decimal.One
let divisor = 3m
// The following displays 1.00 to the console
printfn $"{Math.Round(dividend/divisor * divisor, 2)}"
Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2))
10진수는 부호, 값의 각 숫자가 0에서 9 사이인 숫자 값, 숫자 값의 정수 부분과 소수 부분을 구분하는 부동 소수점 위치를 나타내는 배율 인수로 구성된 부동 소수점 값입니다.
값의 Decimal 이진 표현은 96비트 정수로 구성된 128비트 및 10진수 부분을 지정하는 데 사용되는 부호 및 배율 인수와 같은 항목을 나타내는 32비트 플래그 집합입니다. 따라서 값 Decimal의 이진 표현은 형식 ((-296에서 296) / 10(0 ~ 28)), 여기서 -(296-1)은 MinValue과 같고, 296-1은 MaxValue과 같습니다.
Decimal 값의 이진 표현 및 예제에 대한 자세한 내용은 Decimal(Int32[]) 생성자와 GetBits 메서드를 참조하십시오.
배율 인수는 숫자 Decimal의 끝에 오는 0도 그대로 유지합니다. 후행 0은 산술 또는 비교 연산의 Decimal 숫자 값에 영향을 미치지 않습니다. 그러나 적절한 형식 문자열이 적용되는 경우 메서드에서 ToString 후행 0을 표시할 수 있습니다.
변환 고려 사항
이 형식은 Decimal 값을 SByte, Int16, Int32, Int64, Byte, UInt16, UInt32, 및 UInt64 값으로 변환하는 메서드를 제공합니다. 이러한 정수 계열 형식에서 Decimal 로의 변환은 정보를 손실하거나 예외를 발생시키지 않는 확장 변환입니다.
Decimal에서 정수형으로 변환하는 경우, Decimal 값을 0 방향으로 가장 가까운 정수 값으로 반올림하는 축소 변환이 됩니다. C#와 같은 일부 언어는 Decimal 값을 Char 값으로 변환하는 것도 지원합니다. 이러한 변환의 결과를 대상 형식으로 나타낼 수 없는 경우 예외가 OverflowException throw됩니다.
Decimal 형식은 또한 Decimal 값을 Single 및 Double 값으로 변환하는 메서드를 제공합니다. Decimal에서 Single 또는 Double로의 변환은 정밀도를 잃을 수 있는 축소 변환이지만, 변환된 값의 크기에 대한 정보는 손실되지 않습니다. 변환은 예외를 발생시키지 않습니다.
Single 또는 Double에서 Decimal로의 변환 결과를 OverflowException로 나타낼 수 없는 경우 Decimal 예외를 throw합니다.
10진수 값에 대한 작업 수행
이 형식은 Decimal 더하기, 빼기, 나누기, 곱하기 및 단항 부정과 같은 표준 수학 연산을 지원합니다. Decimal 메서드를 호출해서 GetBits 값의 이진 표현을 직접 다룰 수도 있습니다.
두 Decimal 값을 비교하려면 표준 숫자 비교 연산자를 사용하거나 또는 CompareTo 메서드를 Equals 호출할 수 있습니다.
클래스의 Math 멤버를 호출하여 숫자의 절대값 가져오기, 두 Decimal 값의 최대값 또는 최소값 결정, 숫자 기호 가져오기, 숫자 반올림 등 다양한 숫자 연산을 수행할 수도 있습니다.
예시
다음 코드 예제에서는 .의 Decimal사용을 보여 줍니다.
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank {
protected decimal MyFortune;
public void AddPenny() {
MyFortune = Decimal.Add(MyFortune, .01m);
}
public decimal Capacity {
get {
return Decimal.MaxValue;
}
}
public decimal Dollars {
get {
return Decimal.Floor(MyFortune);
}
}
public decimal Cents {
get {
return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
}
}
public override string ToString() {
return MyFortune.ToString("C")+" in piggy bank";
}
}
/// Keeping my fortune in Decimals to avoid the round-off errors.
type PiggyBank() =
let mutable myFortune = 0m
member _.AddPenny() =
myFortune <- Decimal.Add(myFortune, 0.01m)
member _.Capacity =
Decimal.MaxValue
member _.Dollars =
Decimal.Floor myFortune
member _.Cents =
Decimal.Subtract(myFortune, Decimal.Floor myFortune)
override _.ToString() =
$"{myFortune:C} in piggy bank"
' Keeping my fortune in Decimals to avoid the round-off errors.
Class PiggyBank
Protected MyFortune As Decimal
Public Sub AddPenny()
MyFortune = [Decimal].Add(MyFortune, 0.01D)
End Sub
Public ReadOnly Property Capacity() As Decimal
Get
Return [Decimal].MaxValue
End Get
End Property
Public ReadOnly Property Dollars() As Decimal
Get
Return [Decimal].Floor(MyFortune)
End Get
End Property
Public ReadOnly Property Cents() As Decimal
Get
Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
End Get
End Property
Public Overrides Function ToString() As String
Return MyFortune.ToString("C") + " in piggy bank"
End Function
End Class
.NET