> 백엔드 개발 > Golang > Go에서 부동 소수점을 정수로 변환할 때 부동 소수점 오류를 방지하려면 어떻게 해야 합니까?

Go에서 부동 소수점을 정수로 변환할 때 부동 소수점 오류를 방지하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-12-15 13:11:22
원래의
469명이 탐색했습니다.

How Can I Avoid Floating-Point Errors When Converting Floats to Integers in Go?

Golang: Float-to-Int 변환에서 부동 소수점 오류 방지

부동 소수점 연산은 서로 다른 숫자 유형 간에 변환할 때 오류가 발생할 수 있습니다. Go에서 float64를 int로 변환하면 부동 소수점 표현 제한으로 인해 예기치 않은 결과가 발생할 수 있습니다.

부동 소수점 표현 이해

컴퓨터는 일반적으로 숫자 데이터를 이진 형식으로 저장합니다. 그러나 100.55와 같은 십진수는 이진수 시스템에서 유한수로 표현될 수 없습니다.

IEEE-754는 Go에서 float64 값을 표현하기 위해 사용하는 표준입니다. 숫자를 저장하는 데 53비트를 사용하고 지수에 11비트를 사용하므로 숫자의 유한한 범위를 허용하지만 필연적으로 근사치를 도입합니다.

십진수를 이진수로 변환

100.55와 같은 십진수를 100.55로 변환하는 경우 float64 내부 표현에서는 정확하게 표현할 수 없습니다. 대신 가장 가까운 이진수를 사용하므로 원본과 값이 약간 다릅니다.

Float-to-Int 변환 오류

코드 예에서 float64(int(x ))은 0.55를 산출해야 하지만 출력은 0.5499999999999972에 더 가깝습니다. 이 오류는 100.55가 아닌 100.0을 나타내는 float64(int(x))를 사용하여 동일한 숫자의 두 가지 다른 표현 사이에서 빼기가 수행되기 때문에 발생합니다.

해결책

정밀도 오류를 방지하려면, 다음 접근 방식을 고려하십시오.

  • 전반적으로 결과: 적절한 형식 문자열과 함께 fmt.Printf를 사용하여 출력을 원하는 소수 자릿수로 반올림합니다.
  • 부동 소수점 숫자 사용을 피하세요. 통화 또는 정밀과 관련된 애플리케이션의 경우 계산 시 부동 소수점 오류를 제거하기 위해 값을 정수 또는 유리수로 표현하는 것을 고려해 보세요.

위 내용은 Go에서 부동 소수점을 정수로 변환할 때 부동 소수점 오류를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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