유형 접미사를 사용하지 않고 소수점이있는 숫자를 소수점 유형에 직접 할당 할 수없는 이유는 무엇입니까?
유형 접미사를 사용하지 않고 소수점이있는 숫자를 소수점 유형에 직접 할당 할 수없는 이유는 무엇입니까? 이런 종류의 숫자는 소수 유형의 숫자로 간주되지 않습니까?
decimal bankBalance = 3433.20; // ERROR!
편집 : 질문의 마지막 부분을 놓쳤을 수 있으므로 아래 개요는 거의 유용하지 않습니다.
어쨌든, 당신이하려는 일을 할 수없는 이유는 부동 소수점 유형과 decimal
. 그러나 int에서 decimal 로의 암시 적 변환이 있으므로 정수에서 할당 할 수 있습니다.
가능하지만이 구문을 사용해야합니다 (또는 명시 적으로 10 진수로 변환).
decimal bankBalance = 3433.20m;
그리고 수레의 경우
float bankBalance = 3433.20f;
기본값은 두 배입니다.
double bankBalance = 3444.20;
실제로 숨겨진 사양 기능 : 당신은 할 수 있습니다 ;-p
decimal bankBalance = (decimal)3433.20;
이것은 실제로 컴파일러에 의해 10 진수 (float 및 cast가 아님)로 구문 분석됩니다. 그것을 증명하기 위해 IL을 참조하십시오. 하지만 정밀도는 잘립니다 ( M
버전 에서 얻은 2가 아닌 10 진수 1 개가 있음 ).
IL 생성 :
L_0001: ldc.i4 0x861c
L_0006: ldc.i4.0
L_0007: ldc.i4.0
L_0008: ldc.i4.0
L_0009: ldc.i4.1
L_000a: newobj instance void [mscorlib]System.Decimal::.ctor(int32, int32, int32, bool, uint8)
L_000f: stloc.0
비교 :
decimal bankBalance = 3433.20M;
다음을 생성합니다.
L_0001: ldc.i4 0x53d18
L_0006: ldc.i4.0
L_0007: ldc.i4.0
L_0008: ldc.i4.0
L_0009: ldc.i4.2
L_000a: newobj instance void [mscorlib]System.Decimal::.ctor(int32, int32, int32, bool, uint8)
L_000f: stloc.0
유일한 차이점은 소수 자릿수입니다 (1 대 2, 따라서 10의 요소)
이
decimal bankBalance = 3433.20M;
작동합니다. 그 이유는 float와 decimal이 매우 다른 유형이기 때문입니다. float는 입력 한 숫자와 매우 가까운 근사치를 제공하지만 decimal은 정확한 숫자를 제공합니다. 99 %의 경우 차이를 알아 차리지 못하며 float 만 사용해야합니다.
귀하의 답변은 두 가지 중요한 사항으로 구성됩니다.
소수점이있는 모든 숫자 리터럴
double
은 C # 컴파일러에 의해 유형 인 것으로 추론되므로 기본적으로3433.20
adouble
입니다.double
숫자 는 더 짧은 범위를 포함하는 것보다 정확 하기decimal
때문에 암시 적으로 변환되지 않으므로 double에서 decimal로 캐스트하는 동안 오버플로가 가능합니다.decimal
double
double
범위 : ±(~10^−324 to 10^308)
유효 숫자 15 개 또는 16 개
decimal
의 범위 : ±(~10^-28 to 10^28)
28 개 또는 29 개의 유효 숫자.
일반적인 float 유형과 decimal간에 암시 적 변환이 없음을 설명하는 십진수 에 대한 MSDN 페이지를 참조하십시오 .
시험
decimal bankBalance = 3433.20m;
'program tip' 카테고리의 다른 글
객체 확산에서 노드 v6 실패 (0) | 2021.01.07 |
---|---|
Perl에서 운영 체제를 어떻게 감지합니까? (0) | 2021.01.07 |
Tortoise SVN으로 폴더의 저장소 변경 (0) | 2021.01.07 |
Java 용 힙 분석 도구에 대한 권장 사항? (0) | 2021.01.07 |
C는 오버로딩을 지원합니까? (0) | 2021.01.07 |