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

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

Susan Sarandon
Susan Sarandon원래의
2024-12-27 20:54:11394검색

How Can I Avoid Floating-Point Errors When Converting `float64` to `int` in Go?

float64를 int로 변환하여 Go에서 부동 소수점 오류 방지

부동 소수점 숫자(float64)를 정수(int)로 변환할 때 Go, 개발자는 예상치 못한 결과로 이어지는 정밀도 문제에 직면할 수 있습니다. 이 문서에서는 IEEE-754 float64 표현의 제한 사항을 살펴보고 이러한 오류를 완화하는 방법에 대한 지침을 제공합니다.

변환 문제 이해

부동 소수점 숫자는 IEEE를 사용하여 저장됩니다. -754 표준은 숫자에 사용할 수 있는 비트가 제한된 유한 이진 표현으로 숫자를 나타냅니다. 따라서 모든 10진수를 이 이진 형식으로 정확하게 표현할 수는 없습니다.

결과적으로 float64 값을 int로 변환할 때 float64에 사용되는 이진 표현이 다음의 이진 표현과 완벽하게 일치하지 않을 수 있습니다. 해당 int. 이러한 불일치로 인해 아래 예제 코드에서 볼 수 있듯이 반올림 오류가 발생합니다.

x := 100.55
fmt.Println(x - float64(int(x))) // Output: 0.5499999999999972

오류 해결

부동 소수점 오류를 처리하려면 다음 사항을 이해해야 합니다.

  • IEEE-754 표현: float64 값에 대한 이진 표현의 제한 사항을 이해합니다.
  • 반올림: float64에서 int로의 변환에는 가장 가까운 정수로 반올림이 포함된다는 점을 인식하세요.
  • 정밀도: 부동 소수점 숫자가 항상 이진수로 정확하게 표현되지 않을 수도 있다는 점을 인정하세요. 형식.

이러한 오류를 방지하려면 다음 전략을 고려하세요.

  • 정수 유형 사용: 정밀도가 중요한 경우 금액 또는 이와 유사한 금액을 저장하세요. float64s 대신 정수 값.
  • 반올림 숫자: 사용 float64 값을 인쇄하기 전에 특정 소수 자릿수로 반올림하는 fmt.Printf() 함수.
  • 근사치 수용: float64 값은 대략적인 표현임을 이해하고 정확한 값을 비교하지 마세요.

결론

Go에서 float64를 int로 변환하려면 IEEE-754 표현을 이해하고 이진수 시스템의 고유한 한계를 수용해야 합니다. 위에 논의된 전략을 적용함으로써 개발자는 정밀 오류를 방지하고 정확한 수치 계산을 보장할 수 있습니다.

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

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