go07 很大的数

go07 很大的数

数太大了怎办?

浮点类型可以存储非常大的数值,但是精度不高

整型很精确,但是取值范围有限。

如果你需要很大的数,而且要求很精确,那么怎么办

  • int64 可以容纳很大的数,如果还不行,那么:

  • uint64 可以容纳更大的正数,如果还不行,那么:

  • 也可以凑合用浮点类型,但是还有另外一种方法:使用 big 包。

注意: 如果没有为指数形式的数值指定类型的话,那么 Go 将会将它视作 float64 类型。

big 包

对于较大的整数(超过1018 ):big.Int

对于任意精度的浮点类型,big.Float

对于分数,big.Rat

big.Int

一旦使用了 big.Int,那么等式里其它的部分也必须使用 big.Int 。

NewInt() 函数可以把 int64 转化为 big.Int 类型。
在这里插入图片描述
如何把 24 x 1018 转化为 big.Int 类型?

  • 首先 new 一个 big.Int 。

  • 再通过 SetString 函数把数值的字符串形式,和几进制传递进行即可。

缺点:用起来繁琐,且速度慢。
在这里插入图片描述

较大数值的常量

在 Go 里面,可以为常量指明类型(这句话会报错):
在这里插入图片描述
也可以不指明常量的类型。。。

对于变量,Go 会使用类型推断。

而在 Go 里面,常量是可以无类型的(untyped),这句话就不会报错:
在这里插入图片描述

注意: 上面这个不报错的常量如果用 Println 函数打印会报错,因为这个函数里默认会将没有定义类型的整数类型当做 Int 来处理。

常量使用 const 关键字来声明,程序里的每个字面值都是常量。

这意味着:比较大的数值可以直接使用(作为字面值)。

针对字面值和常量的计算是在编译阶段完成的。

Go 的编译器是用 Go 编写的,这种无类型的数值字面值就是由 big 包所支持的。这使你可以操作很大的数(超过 18 的10¹⁸)

只要能够容纳得下,那么常量就可以赋值给变量。

尽管 Go 编译器使用 big 包来处理无类型的数值常量,但是常量和 big.Int 的值是不能互换的。

【上一讲】go06 整数
【下一讲】go08 多语言文本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值