정수 리터럴이 double로 정확하게 표현되지 않음
정수 리터럴이 double로 정확하게 표현되지 않음 (integer_literal_imprecise_as_double)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 integer_literal_imprecise_as_double 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 간단히 말하면, 정수 리터럴을 double로 바꿀 때 오버플로우나 정밀도 손실 없이 64비트 double로 표현할 수 없는 상황에서 분석기가 이 진단을 알려 줘요. 왜 이런 일이 생기는지 살펴볼게요.
본문
진단 메시지
The integer literal is being used as a double, but can't be represented as a 64-bit double without overflow or loss of precision: '{0}'.
정수 리터럴을 double로 사용하고 있는데, 오버플로우나 정밀도 손실 없이 64비트 double로 표현할 수 없어요: '{0}'.
설명
분석기는 정수 리터럴이 double로 암시적으로 변환되는데, 그 값이 오버플로우나 정밀도 손실 없이 64비트 double로 표현될 수 없을 때 이 진단을 만들어 내요. 정수 리터럴은 주변 문맥이 double 타입을 요구하면 double로 암시적으로 변환돼요.
예시
다음 코드는 정수 값 9223372036854775807을 double로 정확히 표현할 수 없기 때문에 이 진단을 만들어 내요.
double x = 9223372036854775807;
일반적인 해결 방법
정확한 값을 사용해야 한다면, BigInt 클래스를 사용해 값을 표현하면 돼요.
var x = BigInt.parse('9223372036854775807');
double을 사용해야 한다면, 정확하게 표현할 수 있는 값으로 바꾸면 돼요.
double x = 9223372036854775808;
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- 숫자 타입과 표현 범위에 대해 더 알고 싶다면 Numbers 문서를 참고해요.