Go의 나눗셈 이해
부동 소수점 나눗셈을 자동으로 수행하는 다른 프로그래밍 언어와 달리 Go에서는 나눗셈을 위해 부동 소수점으로의 명시적 변환이 필요합니다. 운영. 이로 인해 정수로 작업할 때 예상치 못한 결과가 발생할 수 있습니다.
다음 코드를 고려하세요.
fmt.Println(3 / 10)
이렇게 하면 예상되는 0.3 대신 0이 출력됩니다. 그 이유는 피연산자 3과 10이 모두 유형이 지정되지 않은 정수 상수이기 때문입니다. Go 언어 사양에 따르면 이진 연산의 피연산자가 다양한 종류의 유형이 지정되지 않은 상수인 경우 연산과 결과는 목록의 뒷부분에 나타나는 유형(정수, 룬, 부동 소수점, 복소수)을 사용합니다. 이 경우 정수가 부동 소수점 앞에 나타나므로 결과는 유형이 지정되지 않은 정수(0)입니다.
부동 소수점 결과를 얻으려면 피연산자 중 하나가 부동 소수점 상수여야 합니다. 다음을 고려하십시오.
fmt.Println(3.0 / 10.0) fmt.Println(3.0 / 10) fmt.Println(3 / 10.0)
이러한 모든 표현식은 유형이 지정되지 않은 부동 소수점 상수 0.3으로 평가됩니다. 피연산자 중 하나에 .0을 추가하면 이를 부동 소수점으로 명시적으로 변환하여 결과적으로 부동 소수점 결과를 얻습니다.
나누기 연산에 형식화된 피연산자가 포함된 경우 형식화된 피연산자의 형식에 따라 결과가 결정됩니다. 표현의 종류. float64 결과를 보장하려면 입력된 피연산자가 float64여야 합니다. 예를 들면 다음과 같습니다.
var i3 = 3 var i10 = 10 fmt.Println(float64(i3) / 10) fmt.Println(3 / float64(i10))
이러한 표현식은 int 변수를 float64로 변환하여 float64 결과 0.3이 됩니다.
10.0 및 3.0과 같은 숫자 리터럴은 유형이 지정되지 않은 부동이라는 점에 유의하는 것이 중요합니다. -float64가 아닌 포인트 상수입니다. i3 / 10.0 및 3.0 / i10과 같은 표현식은 입력된 피연산자(i3 및 i10)에 따라 결과 유형이 결정되므로 여전히 정수 0이 됩니다.
위 내용은 Go는 정수 나눗셈을 어떻게 처리하며 부동 소수점 결과를 어떻게 보장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!