decimal(C# 참조)
decimal 키워드는 128비트 데이터 형식을 나타냅니다. decimal 형식은 부동 소수점 형식에 비해 전체 자릿수는 크고 범위는 작아서 재무 및 통화 계산에 적합합니다. 다음 표에서는 decimal 형식의 대략적인 범위와 전체 자릿수를 보여 줍니다.
형식 |
근사 범위 |
전체 자릿수 |
.NET Framework 형식 |
---|---|---|---|
decimal |
(-7.9 x 1028 - 7.9 x 1028) / (100 - 28) |
28-29개의 유효 자릿수 |
리터럴
숫자 형식의 실수 리터럴이 decimal로 처리되게 하려면 다음과 같이 접미사 m 또는 M을 사용합니다.
decimal myMoney = 300.5m;
m 접미사가 없으면 숫자가 double로 처리되어 컴파일 오류가 발생합니다.
변환
정수 계열 형식은 암시적으로 decimal로 변환되어 계산 결과가 decimal로 나타납니다. 따라서 접미사를 붙이지 않고 정수 리터럴을 사용하여 decimal 변수를 초기화할 수 있습니다. 예를 들면 다음과 같습니다.
decimal myMoney = 300;
부동 소수점 형식과 decimal 형식 간의 암시적 변환은 없습니다. 따라서 이 두 형식 간의 변환에는 캐스트를 사용해야 합니다. 예를 들면 다음과 같습니다.
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
또한 같은 식에서 decimal과 숫자 정수 계열 형식을 혼합할 수 있습니다. 그러나 캐스트를 사용하지 않고 decimal과 부동 소수점 형식을 혼합하면 컴파일 오류가 발생합니다.
암시적 숫자 변환에 대한 자세한 내용은 암시적 숫자 변환 표(C# 참조)를 참조하십시오.
명시적 숫자 변환에 대한 자세한 내용은 명시적 숫자 변환 표(C# 참조)를 참조하십시오.
Decimal 출력 서식 지정
String.Format 메서드를 사용하거나 String.Format()을 호출하는 Console.Write 메서드를 통해 결과의 서식을 지정할 수 있습니다. 통화 서식은 이 문서 뒷부분에 있는 두 번째 예제처럼 표준 통화 서식 문자열 "C" 또는 "c"를 사용하여 지정합니다. String.Format 메서드에 대한 자세한 내용은 String.Format을 참조하십시오.
예제
이 예제에서는 같은 식에 decimal과 int가 혼합되어 있습니다. 계산 결과는 decimal 형식입니다.
다음 예제에서는 문을 사용하여 double과 decimal 변수를 추가하려 합니다.
double x = 9;
Console.WriteLine(d + x); // Error
다음 오류가 발생합니다.
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
public class TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y); // Result converted to decimal
}
}
// Output: 12.1
이 예제에서는 통화 서식 문자열을 사용하여 출력 서식을 지정합니다. x는 소수 자릿수가 $0.99를 초과하기 때문에 반올림됩니다. 최대 자릿수를 나타내는 변수 y는 올바른 서식으로 정확하게 표시됩니다.
public class TestDecimalFormat
{
static void Main()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
/* Output:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.