>  기사  >  Java  >  부동 소수점을 Double로 변환하면 정밀도가 떨어지는 이유는 무엇이며 정확도를 유지하려면 어떻게 해야 합니까?

부동 소수점을 Double로 변환하면 정밀도가 떨어지는 이유는 무엇이며 정확도를 유지하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 21:20:02900검색

Why Does Converting a Float to Double Lose Precision, and How Can I Maintain Accuracy?

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

기본 float를 기본 double로 변환할 때 다음과 같은 이유로 정밀도에 불일치가 발생할 수 있습니다. 부동 소수점 연산의 고유한 특성. 단순히 float를 double로 캐스팅하면 제공된 코드에서 볼 수 있듯이 원치 않는 반올림 오류가 발생할 수 있습니다.

<code class="java">float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375</code>

그러나 float를 문자열로 변환한 다음 다시 double로 구문 분석하면 원하는 정밀도가 생성됩니다.

<code class="java">System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35</code>

float에서 double로의 직접 캐스트에서 표면적으로 정밀도가 더 높아진 것처럼 보이지만 실제로는 정확성이 향상되지 않는다는 점에 유의하는 것이 중요합니다. 이중 표현은 float 값의 고유 정밀도를 정확하게 반영합니다. 문자열로 변환한 후 다시 역으로 변환하면 표현이 단순화되어 원래 float보다 문자열 표현에 더 가까운 double 값이 생성됩니다.

이 해결 방법을 사용하기 전에 float 및 double 데이터 유형 사용의 적절성을 고려하세요. 금융 또는 과학 응용 분야에서와 같이 정확한 소수 값이 중요한 경우 소수 계산에 대한 더 높은 정밀도와 제어 기능을 제공하는 BigDecimal이 더 적합한 유형으로 권장됩니다.

위 내용은 부동 소수점을 Double로 변환하면 정밀도가 떨어지는 이유는 무엇이며 정확도를 유지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.