简体   繁体   English

为什么 fmt.Println(float64(1/2)) 显示 0?

[英]Why fmt.Println(float64(1/2)) shows 0?

package main

import (
    "fmt"
)

func main() {
    fmt.Println(float64(1/2))
}

Why it prints: 0为什么打印:0

Playground link: https://play.golang.org/p/KGgao6n8lTA游乐场链接: https : //play.golang.org/p/KGgao6n8lTA

Is it because fmt.Println precision is low?是不是因为fmt.Println精度低?

The order of operations here is: 1/2 = 0 (integer division truncates decimal places) followed by float64(0) = 0 , then fmt.Println(0) .这里的操作顺序是: 1/2 = 0 (整数除法截断小数位),然后是float64(0) = 0 ,然后是fmt.Println(0)

So in short: the integer division is truncated to 0. Everything else works fine.简而言之:整数除法被截断为 0。其他一切正常。

As @Amadan commented, you can force a floating point division by casting one of the integers, ie float64(1) / 2 = 0.5 .正如@Amadan 评论的那样,您可以通过强制转换整数之一来强制进行浮点除法,即float64(1) / 2 = 0.5

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM