floの64をGoのintに変換するにはどうすればよいですか? strconv
パッケージは文字列との間の変換に使用できますが、文字列ではないデータ型間での変換はできません。私はfmt.Sprintf
を使用して文字列に何かを変換し、次にstrconv
必要なデータ型に変換できますが、この余分な変換はやや不器用なようです。これを行うにはより良い方法がありますか?単にint型にキャストするfloat64をGoのintに変換する
48
A
答えて
95
package main
import "fmt"
func main() {
var x float64 = 5.7
var y int = int(x)
fmt.Println(y) // outputs "5"
}
0
は、あなたのシステムが内部的に1.9999999999として2.0を表している場合、あなたが期待するもの得ることはありませんフロートを、切り捨てます。さまざまなprintf変換がこれを処理し、変換時に適切に丸めます。
package main
import (
"fmt"
"strconv"
)
func main() {
floats := []float64{1.9999, 2.0001, 2.0}
for _, f := range floats {
t := int(f)
s := fmt.Sprintf("%.0f", f)
if i, err := strconv.Atoi(s); err == nil {
fmt.Println(f, t, i)
} else {
fmt.Println(f, t, err)
}
}
}
コードをGo Playground
4
にその単にintへのfloat64から、これは
package main
import (
"fmt"
)
func main() {
nf := []float64{-1.9999, -2.0001, -2.0, 0, 1.9999, 2.0001, 2.0}
//round
fmt.Printf("Round : ")
for _, f := range nf {
fmt.Printf("%d ", round(f))
}
fmt.Printf("\n")
//rounddown ie. math.floor
fmt.Printf("RoundD: ")
for _, f := range nf {
fmt.Printf("%d ", roundD(f))
}
fmt.Printf("\n")
//roundup ie. math.ceil
fmt.Printf("RoundU: ")
for _, f := range nf {
fmt.Printf("%d ", roundU(f))
}
fmt.Printf("\n")
}
func roundU(val float64) int {
if val > 0 { return int(val+1.0) }
return int(val)
}
func roundD(val float64) int {
if val < 0 { return int(val-1.0) }
return int(val)
}
func round(val float64) int {
if val < 0 { return int(val-0.5) }
return int(val+0.5)
}
を作業する必要がある場合:だから、より正確な値を取得するには、変換は、あなたが最初に想像するよりも、より複雑です
出力:
Round : -2 -2 -2 0 2 2 2
RoundD: -2 -3 -3 0 1 2 2
RoundU: -1 -2 -2 0 2 3 3
ここ遊び場のコードだ - https://play.golang.org/p/HmFfM6Grqh
関連する問題
- 1. パンダはmysql intをfloat64に変換します
- 2. 数値(intまたはfloat64)をGolangの文字列に変換する方法
- 3. 文字列をgo言語のintに変換する
- 4. float64とcomplex128タイプの最大値はGo
- 5. float64型のnp.arrayをuint8の倍率値に変換する
- 6. intをintに変換する
- 7. intをint配列に変換する
- 8. 配列{Float64,1}をFloat64に変換する方法は? juliaで
- 9. メッセージタイプをFloat64からFloat32に変換する方法
- 10. pandasがintに変換されないintに変換する
- 11. const int intに変換する*
- 12. Go [] byteをC * charに変換する
- 13. CをGoに変換(変換)するツールですか?
- 14. リストを変換する<int[]> int [、]
- 15. ハスケルでIntをIntにIntを変換する
- 16. Go to int in
- 17. intデータタイプGo
- 18. Go [] int to rune
- 19. intをGPIOのバイトに変換する
- 20. テンソルフローのバイナリをintに変換する
- 21. const intに変換
- 22. intをfloatに変換するには?
- 23. filemodeをintに変換するには?
- 24. intをdrawableに変換するには?
- 25. BufferedImageをint []に変換するには?
- 26. int []をshort []に変換するには?
- 27. int int配列への変換int
- 28. intをint []とbyte []をbyte [] []に変換するには?
- 29. long intをC言語のintに変換する方法
- 30. int文字列のリスト/タプルをintに変換する
それはわかりませんでした - ありがとう! –
@David Graysonだから、この変換はMath.Floor(x)と同じですか?または浮動小数点64がメモリに保存する方法のために.7を落としますか? –
@DavidLarsen Go仕様から: "浮動小数点数を整数に変換するとき、端数は破棄されます(ゼロに切り捨てられます)"。 ([Go spec](http://golang.org/ref/spec#Conversions)) – kvu787