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. intをintに変換する
- 2. Go [] byteをC * charに変換する
- 3. CをGoに変換(変換)するツールですか?
- 4. Go [] int to rune
- 5. Go to int in
- 6. ハスケルでIntをIntにIntを変換する
- 7. const intに変換
- 8. intをfloatに変換するには?
- 9. ScalaのJava Collection [Int]をArray [Int]に変換する方法
- 10. スイフト:インデックスをintに変換
- 11. PowershellでDirectoryServices.ResultPropertyValueCollecitonをIntに変換する
- 12. C#IntPtrをintに変換する
- 13. int []をuint8 []に変換する方法
- 14. dateTimeをintに変換する
- 15. intをwstringに変換する
- 16. char *をintに変換する
- 17. 2ブール値をintに変換する
- 18. CharをIntに変換する
- 19. 問題NSStringをIntに変換する
- 20. TEXTをINTフィールドに変換する(submit_date)
- 21. long intをconst time_tに変換する
- 22. intをNSObjectに変換する
- 23. オブジェクトをintに変換する方法
- 24. intをポインタに変換する
- 25. intをブール値に変換する
- 26. BIGINT UNSIGNEDをINTに変換する
- 27. intをCGFloatに変換する
- 28. intをdoubleに変換する
- 29. NSStringをInt - Game Centerに変換する
- 30. Javascript int値をオクテットストリームに変換する
それはわかりませんでした - ありがとう! –
@David Graysonだから、この変換はMath.Floor(x)と同じですか?または浮動小数点64がメモリに保存する方法のために.7を落としますか? –
@DavidLarsen Go仕様から: "浮動小数点数を整数に変換するとき、端数は破棄されます(ゼロに切り捨てられます)"。 ([Go spec](http://golang.org/ref/spec#Conversions)) – kvu787