PHP 편집자 Baicao는 오늘 일반적인 문제에 대한 해결책을 소개합니다: float64를 float32로 변환할 때 발생할 수 있는 정밀도 손실을 확인하는 방법. 부동 소수점 숫자를 변환할 때 두 데이터 유형 간의 비트 수 차이로 인해 정밀도 손실이 발생할 수 있습니다. 이 기사에서는 변환 전과 후의 값을 비교하여 손실이 있는지 확인하는 방법을 자세히 설명하고 개발자가 이 문제를 더 잘 처리하는 데 도움이 되는 실행 가능한 솔루션을 제공합니다.
float64 값을 받았지만 이를 float32 값으로 다른 서비스에 유선으로 보내야 하는 시나리오가 있습니다. 우리는 수신된 값이 항상 float32에 맞아야 한다는 것을 알고 있습니다. 그러나 안전을 위해 float32 로 변환하면 데이터가 손실된다는 사실을 기록하고 싶습니다.
float32와 float64를 직접 비교할 수 없기 때문에 이 코드 블록은 컴파일되지 않습니다 .
으아악이 문제가 발생하는지 쉽게 확인할 수 있는 방법이 있나요? 이 검사는 자주 발생하므로 문자열 변환을 피하고 싶습니다.
float32
值转换回 float64
은 확인용으로만 사용할 수 있습니다.
변환된 값이 동일한 값을 나타내는지 확인하려면 원래 값(입력)과 비교하면 됩니다. ok bool
信息(而不是 error
만 반환하는 것만으로도 충분/관용적:
(참고: nan
와 같은 극단적인 경우는 확인되지 않습니다.)
테스트해 보세요:
으아악출력(go 놀이터에서 시도해 보세요):
으아악변환된 값이 입력값과 매우 유사하더라도 일반적으로 ok = false
结果,因为 float32
的精度小于 float64
가 제공됩니다.
그래서 실제로는 변환된 값의 차이를 확인하는 것이 더 유용할 것입니다. 제안된 솔루션은 절대적인 차이를 확인하는데 이는 그다지 유용하지 않습니다. 예: 1000000.1
和 1000000
是非常接近的数字,即使差异是 0.1
。 0.0001
和 0.00011
的差异要小得多:0.00001
, 하지만 숫자에 비해 차이가 훨씬 큽니다.
따라서 상대적인 차이를 확인해야 합니다. 예:
으아악테스트해 보세요:
으아악출력(go 놀이터에서 시도해 보세요):
으아악위 내용은 이동: float64를 float32로 변환할 때 정밀도 손실을 확인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!