Go에서 분할을 수행하는 방법


88

Go에서 간단한 분할을 수행하려고합니다.

fmt.Println(3/10)

0.3 대신 0을 인쇄합니다. 이건 좀 이상 해요. 누군가가 그 이유를 공유해 주시겠습니까? Go에서 다른 산술 연산을 수행하고 싶습니다.

감사

답변:


89

표현식 3 / 10은 유형이 지정되지 않은 상수 표현식입니다. 사양 은 상수 표현식에 대해 이렇게 말합니다.

이진 연산의 피연산자가 다른 종류의 유형이 지정되지 않은 상수 인 경우 연산 및 부울이 아닌 연산의 경우 결과는이 목록의 뒷부분에 나오는 정수, 룬, 부동 소수점, 복합 유형을 사용합니다.

때문에 3하고 10지정되지 않은 정수 상수이며, 식의 값 (지정되지 않은 정수이고, 0이 경우에).

피연산자 중 하나는 부동 소수점 상수에 대한 결과에 대한 부동 소수점 상수 여야합니다. 다음 표현식은 유형이 지정되지 않은 부동 소수점 상수로 평가됩니다 0.3.

3.0 / 10.0
3.0 / 10
3 / 10.0

형식화 된 상수를 사용할 수도 있습니다. 다음 표현식은 float64상수로 평가됩니다 0.3.

float64(3) / float64(10)
float64(3) / 10
3 / float64(10)

위의 표현식을 인쇄하면 0.3. 예를 들어, fmt.Println(3.0 / 10)인쇄 0.3.


나는 그것이 백분율이라고 가정하고 입력을 받고 있습니다. 예를 들어 사용자가 30을 주면 30/100 * somenumber를 수행해야합니다. 입력은 항상 정수입니다. 이 시나리오에서 분할을 수행하는 방법은 무엇입니까?
Vrushank Doshi 2015

정수를 부동 소수점 숫자로 변환 합니다.
머핀 탑

fmt.Println (float64 (3/10)) 시도했지만 0을 제공합니다
Vrushank Doshi 2015

7
@VrushankDoshi : fmt.Println(float64(3) / float64(10))제공합니다 0.3.
peterSO

20

@Cerise에서 언급 하고 사양에 따라

산술 연산자는 숫자 값에 적용되며 첫 번째 피연산자와 동일한 유형 의 결과를 생성합니다 .

이 경우 첫 번째 피연산자 만 부동 소수점이어야합니다.

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3


예! 첫 번째 피연산자
SMMousavi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.