4

go语言之大数_zzxiaoma的技术博客_51CTO博客

 2 years ago
source link: https://blog.51cto.com/u_3764469/5693023
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

go语言之大数

精选 原创

zzxiaoma 2022-09-20 16:51:27 博主文章分类:go ©著作权

文章标签 类型参数 浮点数 初始化 文章分类 Go语言 编程语言 yyds干货盘点 阅读数151

计算机编程经常需要权衡利弊,做相应的取舍,例如浮点数可以存储任意大小的数字,但是会不精确,整数虽然准确,但是取值范围受到限制。go中有个big包可以存储大数据,big.Int存储整数,big.Float存储浮点数,big.Rat存储分数。

创建big.Int使用NewInt函数

abc := big.NewInt(54232432)
cde := big.NewInt(43222233)

但是如果数字超过int64的范围,就不能使用这种方式初始化。需要使用SetString方法,第二个参数代表是十进制。

mn := new(big.Int)
mn.SetString("222000000000000000000000",10)

big.Int进行除法计算使用Div

zz := new(big.Int)
zz.Div(mn,abc)

big.Int这样的大类型虽然能够精确表示大小的数值,但代价是使用起来比int等原生类型要麻烦,并且运行速度会相对较慢。

常量如果需要存储较大的数值时,uint64有时会存储不下。go语言处理常量时的做法和变量时的做法不同,变量默认会定义成int类型,会导致类型溢出,但是常量不会,常量会标记为无类型。

const abc = 10000000000000000000

上面的定义不会报错。所以直接可以使用,无类型的数值常量由big包提供支持。

但是这里需要注意,常量与big.Int值是无法互换的。

const abc = 10000000000000000000
fmt.Println(abc)

这样是无法进行打印的。所以使用明确使用big包也许会把问题简明化。

还有一个问题是如果无类型当做函数参数时,函数是无法定义的,需要把无类型参数转换为有类型参数。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK