Float 프리미티브를 Double 프리미티브로 캐스팅하면 명백한 정밀도 손실이 발생할 수 있습니다. 이 현상은 종종 double의 "추가" 정밀도로 인해 발생하지만 실제로는 특정 숫자를 정확하게 표현하는 float의 제한된 능력 때문입니다.
다음 예에서 float를 double로 캐스팅하면 다음과 같은 결과가 발생합니다. 숫자:
float temp = 14009.35F; System.out.println(Float.toString(temp)); // 14009.35 System.out.println(Double.toString((double)temp)); // 14009.349609375
한 가지 해결 방법은 부동 소수점을 문자열로 변환한 다음 문자열을 구문 분석하는 것입니다. 원래 값을 유지하는 double로:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35
"추가" 숫자는 실제로 double 프리미티브에 의해 추가되지 않는다는 점에 유의하는 것이 중요합니다. 플로트는 단순히 숫자를 정확하게 나타내지 않았습니다. double은 원래 float의 값을 충실히 나타냅니다.
문자열로 변환하고 다시 변환하면 문자열 표현에 더 가까운 double 값이 생성되지만 이것이 실제로 바람직한지 확인하는 것이 중요합니다.
정확한 소수 값이 필요한 상황(예: 화폐 계산)에서는 대신 BigDecimal 유형을 사용하는 것이 좋습니다. float 또는 double을 사용하면 십진수를 더욱 정확하게 표현할 수 있습니다.
위 내용은 Float를 Double로 변환하면 때때로 정밀도가 떨어지는 것처럼 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!