> 백엔드 개발 > Golang > Go는 정수 나눗셈을 어떻게 처리하며 부동 소수점 결과를 어떻게 보장할 수 있나요?

Go는 정수 나눗셈을 어떻게 처리하며 부동 소수점 결과를 어떻게 보장할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-12-02 08:34:14
원래의
930명이 탐색했습니다.

How Does Go Handle Integer Division, and How Can I Ensure Floating-Point Results?

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

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