簡體   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