> Java > java지도 시간 > Float를 Double로 변환하면 왜 정밀도 문제가 발생합니까?

Float를 Double로 변환하면 왜 정밀도 문제가 발생합니까?

Patricia Arquette
풀어 주다: 2024-11-03 08:33:30
원래의
329명이 탐색했습니다.

Why Does Converting a Float to a Double Introduce Precision Issues?

Float를 Double로 변환할 때 정밀도 유지

기본 부동 소수점을 기본 double로 변환하려고 하면 사용자가 예상치 못한 정밀도 불일치를 경험할 수 있습니다. 아래 예에 설명된 것처럼 단순히 float를 double로 캐스팅하면 잘못된 정밀도가 발생합니다.

float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double) temp)); // Prints 14009.349609375
로그인 후 복사

그러나 float를 문자열로 구문 분석한 다음 결과 문자열을 double로 구문 분석하면 원하는 정밀도를 얻을 수 있습니다.

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
로그인 후 복사

정밀도 불일치 이해

정밀도의 명백한 증가는 진짜가 아니라는 점에 유의하는 것이 중요합니다. 플로트는 처음에 의도한 숫자를 정확하게 나타내지 않았습니다. 변환된 double은 float의 원래 값을 정확하게 반영하는 반면, toString()은 항상 존재했지만 숨겨져 있던 "추가" 정밀도를 드러냅니다.

예를 들어 다음과 같은 가상 시나리오를 고려해 보세요.

float f = 0.1F;
double d = f;
로그인 후 복사

이 경우 f 값은 정확히 0.100000234523이 될 수 있습니다. d는 동일한 값을 유지하지만 문자열로 변환하면 더 높은 정밀도를 가정하고 이미 존재하는 추가 숫자를 표시합니다.

해결 방법으로 문자열 변환

문자열로 변환한 후 다시 변환하면 원래 float보다 의도한 숫자에 더 가까운 double 값이 생성될 수 있지만 이 해결 방법은 문자열 값이 원하는 숫자를 정확하게 나타내는 경우에만 유효합니다.

대체 데이터 유형 고려 사항

사용자는 float/double이 자신의 사용 사례에 적합한지 평가해야 합니다. 정확한 소수 값이 필요한 경우(예: 재무 계산의 경우) BigDecimal이 더 적합한 데이터 유형일 수 있습니다.

위 내용은 Float를 Double로 변환하면 왜 정밀도 문제가 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿