다음을 통해 공유


기본 제공 숫자 변환(C# 참조)

C#은 정수부동 소수점 숫자 형식 집합을 제공합니다. 암시적 또는 명시적 두 숫자 형식 간에 변환이 있습니다. 명시적 변환을 수행하려면 캐스트 식을 사용해야 합니다.

암시적 숫자 변환

다음 표에서는 기본 제공 숫자 형식 간의 미리 정의된 암시적 변환을 보여 줍니다.

부터 에게
sbyte short, int, long, float, double, decimal또는 nint
바이트 short, ushort,int, uint, long, ulong, float, doubledecimal, nint또는nuint
짧은 int, long, float, double또는 , 또는 decimalnint
ushort int, uint, long, ulong, float, double또는 decimal, nint또는 nuint
int long, float, double또는 decimal, nint
uint long, ulong, float, double또는 , 또는 decimalnuint
길다 float, double 또는 decimal
ulong float, double 또는 decimal
플로트 double
nint long, float, double또는 decimal
nuint ulong, float, double또는 decimal

비고

에서 암시적 변환int, , long, ulongnint, 또는 nuintfloat , 또는 ulongdoublelongnuintnint전체 자릿수의 손실을 일으킬 수 있지만 크기의 순서는 손실되지 않습니다. uint 다른 암시적 숫자 변환 시에는 정보 손실이 없습니다.

또한 주의해야 할 사항

  • 모든 정수 계열 숫자 형식 은 암시적으로 부동 소수점 숫자 형식으로 변환할 수 있습니다.

  • sbyte 형식에 대한 암시적 변환은 byte 없습니다. 및 decimal 형식에서의 암시적 변환은 double 없습니다.

  • 형식과 형식 간에 decimal 암시적 변환이 floatdouble 없습니다.

  • 형식 int 의 상수 식 값(예: 정수 리터럴로 표현되는 값)은 대상 형식의 범위 내에 있는 경우 암시적으로 , uintshortushortbyte,, ulongnint또는 nuint,로 변환sbyte할 수 있습니다.

    byte a = 13;
    byte b = 300;  // CS0031: Constant value '300' cannot be converted to a 'byte'
    

    앞의 예제와 같이 상수 값이 대상 형식의 범위 내에 있지 않으면 컴파일러 오류 CS0031 이 발생합니다.

명시적 숫자 변환

다음 표에서는 암시적 변환이 없는 기본 제공 숫자 형식 간의 미리 정의된 명시 적 변환을 보여 줍니다.

부터 에게
sbyte byte, ushort, uint, ulong 또는 nuint
바이트 sbyte
짧은 sbyte, byte, , ushortuint, ulong, 또는nuint
ushort sbyte, byte 또는 short
int sbyte, byte, short, ushort, uint, ulong또는 nuint
uint sbyte, byte, , shortushort, int, 또는nint
길다 sbyte, byte, short, , intushort, uint, ulong, nint또는nuint
ulong sbyte, byte, short, , intushort, uint, long, nint또는nuint
플로트 sbyte, byte,short, ushort, int, uint, long, ulongdecimal, nint또는nuint
더블 sbyte, byte, short, ushort, int, uint, long, ulongfloat, decimal, nint또는nuint
십진수 sbyte, byte, short, ushort, int, uint, long, ulongfloat, double, nint또는nuint
nint sbyte, byte,short, , intushort, uint, ulong또는nuint
nuint sbyte, byte,short, , intushort, uint, long또는nint

비고

명시적 숫자 변환으로 인해 데이터가 손실되거나 예외가 throw될 수 있습니다(일반적으로 .) OverflowException.

또한 다음 사항에 유의하세요.

  • 정수 계열 형식의 값을 다른 정수 형식으로 변환하는 경우 결과는 오버플로 검사 컨텍스트에 따라 달라집니다. 확인된 컨텍스트에서 원본 값이 대상 형식 범위 내에 있으면 변환에 성공합니다. 그렇지 않으면 OverflowException가 던져집니다. 선택되지 않은 컨텍스트에서 변환은 항상 성공하며 다음과 같이 진행됩니다.

    • 원본 형식이 대상 형식보다 큰 경우 가장 중요한 "추가" 비트를 삭제하여 원본 값이 잘립니다. 그런 다음, 결과는 대상 형식의 값으로 처리됩니다.

    • 원본 형식이 대상 형식보다 작은 경우 원본 값은 대상 형식과 크기가 같도록 기호 확장 또는 0 확장입니다. 원본 형식이 서명된 경우 서명 확장이 사용됩니다. 원본 형식이 서명되지 않은 경우 0 확장이 사용됩니다. 그런 다음, 결과는 대상 형식의 값으로 처리됩니다.

    • 원본 형식이 대상 형식과 크기가 같으면 원본 값이 대상 형식의 값으로 처리됩니다.

  • 값을 정수 형식으로 decimal 변환하면 이 값이 0으로 반올림되어 가장 가까운 정수 값으로 반올림됩니다. 결과 정수 값이 대상 형식의 범위를 벗어나면 throw OverflowException 됩니다.

  • double 또는 float 값을 정수 형식으로 변환하면 이 값이 0으로 반올림되어 가장 가까운 정수 값으로 반올림됩니다. 결과 정수 값이 대상 형식의 범위를 벗어나면 결과는 오버플로 검사 컨텍스트에 따라 달라집니다. 확인된 컨텍스트에서 throw OverflowException 되는 반면, 선택되지 않은 컨텍스트에서는 결과가 대상 형식의 지정되지 않은 값입니다.

  • 변환 doublefloat때 값은 double 가장 float 가까운 값으로 반올림됩니다. 값이 double 너무 작거나 너무 커서 형식에 float 맞지 않으면 결과는 0 또는 무한대입니다.

  • 변환하거나 변환 floatdecimal때 원본 값은 표현으로 decimal 변환되고 필요한 경우 28번째 소수점 이후 가장 가까운 숫자 double 로 반올림됩니다. 원본 값의 값에 따라 다음 결과 중 하나가 발생할 수 있습니다.

    • 원본 값이 너무 작아서 0이 decimal되면 결과가 0이 됩니다.

    • 원본 값이 NaN(숫자가 아님), 무한대 또는 너무 커서 표시 decimal할 수 없는 경우 throw OverflowException 됩니다.

  • 변환하거나 변환 decimalfloat 때 원본 값은 각각 가장 float 가까운 값 또는 doubledouble으로 반올림됩니다.

C# 언어 사양

자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.

참고하십시오