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 중국어 웹사이트의 기타 관련 기사를 참조하세요!