2
나는 다음과 같은 코드가 있습니다디버거가 숫자를 반올림합니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?
public static float FLOAT_VALUE = 0.899999761581421f;
을하지만 디버거를 사용하여이 값을 호출 할 때마다, 나는 지금 0.9f가 될 것을 참조하십시오. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?
나는 다음과 같은 코드가 있습니다디버거가 숫자를 반올림합니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?
public static float FLOAT_VALUE = 0.899999761581421f;
을하지만 디버거를 사용하여이 값을 호출 할 때마다, 나는 지금 0.9f가 될 것을 참조하십시오. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?
값이 실제로 변경 중이거나 디버거가 고유 한 부동 소수점을 구별하는 데 충분한 숫자를 표시하지 못할 가능성이 있습니다.
가장 가까운 float to 0.899999761581421은 0.89999973773956298828125입니다. 0.9에 가장 가까운 float 값은 0.89999997615814208984375입니다. 그들은 다르다.
0.89999973773956298828125의 toString 변환은하지 0.9
https://stackoverflow.com/questions/588004/is-floating-point-math-broken – epascarello
'float'있다 [6-9 중요한 진수 0.89999974이다 정밀도] (https://en.wikipedia.org/wiki/Single-precision_floating-point_format#IEEE_754_single-precision_binary_floating-point_format:_binary32). 당신은 15 자리의 정확도를 지정하고 있습니다. 'float'은 그것을 저장할 수 없지만'double '은 [십진수 유효 자릿수 십진수 십진수]입니다 (https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating- point_format : _binary64). – Andreas
디버거가 필요한 수보다 적은 수로 반올림됩니다. 가장 가까운 float 값은 0.899999761581421이며 0.89999973773956298828125입니다. 0.9에 가장 가까운 float 값은 0.89999997615814208984375입니다. 그들은 다르다. 귀하의 float의 toString 변환은 0.81799974가 아니고, –