avoid_js_rounded_ints 진단: JavaScript로 컴파일될 때 정확히 표현할 수 없는 정수 리터럴

avoid_js_rounded_ints 진단: JavaScript로 컴파일될 때 정확히 표현할 수 없는 정수 리터럴

Dart 분석기가 내보내는 진단에는 이름이 있어요. avoid_js_rounded_ints정수 리터럴의 값을 JavaScript Number로 정확히 표현할 수 없을 때 Dart 분석기가 알려주는 린트(lint) 진단이에요. 웹에서 값이 조용히 바뀔 수 있어요.

출처: avoid_js_rounded_ints

본문

설명

분석기는 정수 리터럴의 값을 JavaScript Number로 정확히 표현할 수 없을 때 이 진단을 만들어요.

Dart 코드를 JavaScript로 컴파일하면, -(2^53 - 1)부터 2^53 - 1 범위를 벗어나는 정수가 가장 가까운 표현 가능한 값으로 반올림될 수 있어요. 이렇게 되면 웹에서 리터럴의 값이 조용히 바뀌어요.

Dart가 각 플랫폼에서(JavaScript로 컴파일할 때를 포함해서) 숫자를 어떻게 표현하는지 더 자세히 알아보려면 Numbers in Dart를 확인해 보세요.

예시

다음 코드는 9007199254740993(2^53 + 1)이 JavaScript Number로 정확히 표현될 수 없어서, JavaScript로 컴파일했을 때 런타임에서 9007199254740992로 반올림되기 때문에 이 진단을 만들어요.

final i = 9007199254740993;

흔한 해결 방법

값이 JavaScript로 컴파일할 때를 포함한 모든 플랫폼에서 정확해야 한다면, BigInt를 사용해서 값을 표현해요.

final i = BigInt.parse('9007199254740993');

더 알아보기