Float64类型在Golang中打印为int

时间:2019-07-14 22:37:18

标签: go types floating-point strconv

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

我已经尝试了很多分数,包括那些不解析为重复小数的分数,以及简单地写出浮点数和打印(例如,num := 1.5然后fmt.Println(num)给出输出{{ 1}})。

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

1 个答案:

答案 0 :(得分:4)

  

The Go Programming Language Specification

     

Integer literals

     

整数文字是代表整数的数字序列   常数。

     

Floating-point literals

     

浮点文字是a的十进制表示形式   浮点常量。它具有整数部分,小数点,   小数部分和指数部分。整数和小数部分   包含十进制数字;指数部分是e或E,后跟一个   (可选)带符号的十进制指数。整数部分之一或   小数部分可能会被删除;小数点之一或   指数可能会消失。

     

Arithmetic operators

     

对于两个整数值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