繁体   English   中英

Float64类型在Golang中打印为int

[英]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

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

暂无
暂无

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

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