Float64 类型打印为 Golang 中的 int
Float64 type printing as int in Golang
令人惊讶的是,我找不到其他人遇到同样的问题;我尝试简单地在 Go 中初始化一个 float64 并打印它,然后尝试进行字符串转换并打印它。两种输出都不准确。
我已经用很多分数尝试过这个,包括那些不解析为重复小数的分数,以及简单地写出浮点数和打印(例如 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
The Go Programming Language Specification
An integer literal is a sequence of digits representing an integer
constant.
A floating-point literal is a decimal representation of a
floating-point constant. It has an integer part, a decimal point, a
fractional part, and an exponent part. The integer and fractional part
comprise decimal digits; the exponent part is an e or E followed by an
optionally signed decimal exponent. One of the integer part or the
fractional part may be elided; one of the decimal point or the
exponent may be elided.
For two integer values x and y, the integer quotient q = x / y and
remainder r = x % y satisfy the following relationships:
x = q*y + r and |r| < |y|
with x / y truncated towards zero.
您使用整数文字和算术(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
你应该使用 floating-point 文字和算术来写:
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
令人惊讶的是,我找不到其他人遇到同样的问题;我尝试简单地在 Go 中初始化一个 float64 并打印它,然后尝试进行字符串转换并打印它。两种输出都不准确。
我已经用很多分数尝试过这个,包括那些不解析为重复小数的分数,以及简单地写出浮点数和打印(例如 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
The Go Programming Language Specification
An integer literal is a sequence of digits representing an integer constant.
A floating-point literal is a decimal representation of a floating-point constant. It has an integer part, a decimal point, a fractional part, and an exponent part. The integer and fractional part comprise decimal digits; the exponent part is an e or E followed by an optionally signed decimal exponent. One of the integer part or the fractional part may be elided; one of the decimal point or the exponent may be elided.
For two integer values x and y, the integer quotient q = x / y and remainder r = x % y satisfy the following relationships:
x = q*y + r and |r| < |y|
with x / y truncated towards zero.
您使用整数文字和算术(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
你应该使用 floating-point 文字和算术来写:
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