bigを浮動小数点に変換します。下のコードを書きますが、uint64でオーバーフローします。bigを中立させる正しい方法は何ですか?big.lntに浮かべてください。golang big.Floatをbig.Intに変換します。
package main
import "fmt"
import "math/big"
func FloatToBigInt(val float64) *big.Int {
bigval := new(big.Float)
bigval.SetFloat64(val)
coin := new(big.Float)
coin.SetInt(big.NewInt(1000000000000000000))
bigval.Mul(bigval, coin)
result := new(big.Int)
f,_ := bigval.Uint64()
result.SetUint64(f)
return result
}
func main() {
fmt.Println("vim-go")
fmt.Println(FloatToBigInt(float64(10)))
fmt.Println(FloatToBigInt(float64(20)))
fmt.Println(FloatToBigInt(float64(30)))
fmt.Println(FloatToBigInt(float64(40)))
fmt.Println(FloatToBigInt(float64(50)))
fmt.Println(FloatToBigInt(float64(100)))
fmt.Println(FloatToBigInt(float64(1000)))
fmt.Println(FloatToBigInt(float64(10000)))
}
感謝。しかし、この例ではhttps://play.golang.org/p/P02AN1e09Cが表示されていますが、それにも問題があります。 – goask
'bigval'のデフォルト精度は53ビットです。正確な結果を得るには、この値を増やす必要があります:https://play.golang.org/p/Xy88JX57JE。 プログラムに必要なビット数を決定するには、浮動小数点精度のドキュメントを読む必要があります。 – abhink
私は知られています。 – goask