> 백엔드 개발 > Golang > Go의 정수 나누기가 부동 소수점 숫자 대신 0이 되는 이유는 무엇입니까?

Go의 정수 나누기가 부동 소수점 숫자 대신 0이 되는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-14 16:37:11
원래의
750명이 탐색했습니다.

Why Does Go's Division of Integers Result in 0 Instead of a Floating-Point Number?

Go의 부동 소수점 나눗셈

나눗셈의 겉보기 단순성에도 불구하고 Go에서 이 작업을 구현하면 예상치 못한 결과가 발생할 수 있습니다. 제공된 예에 설명된 대로:

fmt.Println(3/10)
로그인 후 복사

이 코드 조각은 놀랍게도 예상된 "0.3" 대신 "0"을 생성합니다. 이 동작을 이해하려면 Go 유형 시스템의 복잡성을 자세히 살펴보는 것이 중요합니다.

Go에서 나누기 연산자의 피연산자는 유형이 지정되지 않은 상수입니다. 즉, 해당 데이터 유형이 명시적으로 지정되지 않습니다. Go 사양에 따르면 유형이 지정되지 않은 상수를 사용하여 이진 연산을 처리할 때 결과의 데이터 유형은 관련된 유형의 우선 순위에 따라 결정됩니다. 이 경우 두 피연산자는 모두 정수이므로 값이 "0"인 형식화되지 않은 정수 표현식이 됩니다.

부동 소수점 상수 결과를 얻으려면 피연산자 중 하나가 명시적으로 부동 소수점으로 형식화되어야 합니다. 다음은 이를 보여주는 몇 가지 예입니다.

3.0 / 10.0
3.0 / 10
3 / 10.0
로그인 후 복사

이러한 표현식에서 부동 소수점 상수(예: "3.0")는 결과도 값이 "0.3"인 부동 소수점 상수임을 보장합니다. ".

또는 피연산자 중 하나가 유형 변수인 경우 유형 변수의 데이터 유형이 우선합니다. 예를 들어 다음 표현식은 정수 변수를 float64 값으로 변환하고 "0.3"을 생성합니다.

var i3 = 3
var i10 = 10
fmt.Println(float64(i3) / 10)
fmt.Println(3 / float64(i10))
로그인 후 복사

위 내용은 Go의 정수 나누기가 부동 소수점 숫자 대신 0이 되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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