把big.float转换成big.int,我写了下面的代码,但是它溢出了uint64,那么把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)))
}
字符串
4条答案
按热度按时间sgtfey8w1#
一个大于
uint64
的大整数总是会导致溢出,因为uint64
的大小是固定的。你应该在*Float
上使用以下方法:字符串
所需的改动如下:
型
工作示例:https://play.golang.org/p/sEhH6iPkrK
bmp9r5qi2#
使用函数Float.Int(nil)
oalqel3c3#
我曾经处理过一个常规的float 64数字(不大。Float),发现通过字符串进行转换是最精确的方法。
注意:该示例用于float 64-> decimal(,20)转换。
字符串
https://play.golang.org/p/_lkyQ_0udjd
tp5buhyn4#
我的例子,就是把big.Float转换成big.Int
字符串
为了以防万一,
型
我希望它能帮助任何人。