2

令人惊讶的是,我找不到其他人遇到同样的问题。我尝试简单地在 Go 中初始化一个 float64 并打印它,然后尝试进行字符串转换并打印它。两个输出都不准确。

我已经尝试了很多分数,包括那些不能解决重复小数的问题,以及简单地写出浮点数并打印(例如num := 1.5,然后fmt.Println(num)给出 output 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
4

1 回答 1

5

Go 编程语言规范

整数文字

整数文字是表示整数常量的数字序列。

浮点字面量

浮点文字是浮点常量的十进制表示。它有一个整数部分、一个小数点、一个小数部分和一个指数部分。整数和小数部分由十进制数字组成;指数部分是 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
于 2019-07-14T22:43:11.813 回答