다음을 통해 공유


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

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

C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.

설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.

팁 (조언)

C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.

암시적 숫자 변환

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

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

비고

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

또한 주의해야 할 사항

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

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

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

  • 형식 int 의 상수 식 값(예: 정수 리터럴로 표현되는 값)은 암시적으로 , byte, short, ushort, nintuintulong, 또는 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, , ushortint, uint, ulong, nint또는nuint
ulong sbyte, byte, short, , ushortint, 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, , ushortint, uint, ulong또는nuint
nuint sbyte, byte,short, , ushortint, uint, long또는nint

비고

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

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

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

    • 원본 형식이 대상 형식보다 큰 경우 가장 중요한 "추가" 비트를 삭제하여 원본 값이 잘립니다. 그런 다음, 결과는 대상 형식의 값으로 처리됩니다.
    • 원본 형식이 대상 형식보다 작은 경우 원본 값은 대상 형식과 크기가 같도록 기호 확장 또는 0 확장입니다. 원본 형식이 서명된 경우 서명 확장이 사용됩니다. 원본 형식이 서명되지 않은 경우 0 확장이 사용됩니다. 그런 다음, 결과는 대상 형식의 값으로 처리됩니다.
    • 원본 형식이 대상 형식과 크기가 같으면 원본 값이 대상 형식의 값으로 처리됩니다.
  • 값을 정수 형식으로 decimal 변환하면 이 값이 0으로 반올림되어 가장 가까운 정수 값으로 반올림됩니다. 결과 정수 값이 대상 형식의 범위를 벗어나면 throw OverflowException 됩니다.

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

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

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

    • 원본 값이 너무 작아서 0이 decimal되면 결과가 0이 됩니다.
    • 원본 값이 NaN(숫자가 아님), 무한대 또는 너무 커서 표시 decimal할 수 없는 경우 throw OverflowException 됩니다.
  • 변환하거나 변환 decimalfloat 때 원본 값은 각각 가장 double 가까운 값 또는 floatdouble으로 반올림됩니다.

C# 언어 사양

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

참고하십시오