[英]Float64 type printing as int in Golang
令人惊讶的是,我找不到其他人遇到同样的问题。 我尝试简单地在Go中初始化一个float64并进行打印,然后尝试进行字符串转换并进行打印。 两种输出都不准确。
我尝试了很多分数,包括那些不解析为重复小数的分数,以及简单地写出float和fmt.Println(num)
例如num := 1.5
然后fmt.Println(num)
给出输出1
)。
package main
import (
"fmt"
"strconv"
)
func main() {
var num float64
num = 5/3
fmt.Printf("%v\n", num)
numString := strconv.FormatFloat(num, 'f', -1, 64)
fmt.Println(numString)
}
预期:
// Output:
1.66
1.66
实际:
// Output:
1
1
整数文字是代表整数常量的数字序列。
浮点文字是浮点常量的十进制表示形式。 它具有一个整数部分,一个小数点,一个小数部分和一个指数部分。 整数和小数部分由十进制数字组成; 指数部分是e或E,后跟一个可选的带符号十进制指数。 整数部分或小数部分之一可以被省略; 可能会省略小数点之一或指数。
对于两个整数值x和y,整数商q = x / y且余数r = x%y满足以下关系:
x = q*y + r and |r| < |y|
x / y截断为零。
您使用整数文字和算术(x / y截断为零)编写的:
package main
import (
"fmt"
"strconv"
)
func main() {
var num float64
num = 5 / 3 // float64(int(5)/int(3))
fmt.Printf("%v\n", num)
numString := strconv.FormatFloat(num, 'f', -1, 64)
fmt.Println(numString)
}
游乐场: https : //play.golang.org/p/PBqSbpHvuSL
输出:
1
1
您应该使用浮点文字和算术编写:
package main
import (
"fmt"
"strconv"
)
func main() {
var num float64
num = 5.0 / 3.0 // float64(float64(5.0) / float64 (3.0))
fmt.Printf("%v\n", num)
numString := strconv.FormatFloat(num, 'f', -1, 64)
fmt.Println(numString)
}
游乐场: https : //play.golang.org/p/Hp1nac358HK
输出:
1.6666666666666667
1.6666666666666667
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.