前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言 -浮点数

Go语言 -浮点数

作者头像
李海彬
发布2018-03-20 14:17:53
2.3K0
发布2018-03-20 14:17:53
举报
文章被收录于专栏:Golang语言社区Golang语言社区

Go提供了两种size的浮点数,float32和float64。它们的算术规范是由IEEE754国际标准定义,现代CPU都实现了这个规范。

浮点数能够表示的范围可以从很小到很巨大,这个极限值范围可以在math包中获取,math.MaxFloat32表示float32的最大值,大约是3.4e38,math.MaxFloat64大约是1.8e308,两个类型最小的非负值大约是1.4e-45和4.9e-324。

float32大约可以提供小数点后6位的精度,作为对比,float64可以提供小数点后15位的精度。通常情况应该优先选择float64,因此float32的精确度较低,在累积计算时误差扩散很快,而且float32能精确表达的最小正整数并不大,因为浮点数和整数的底层解释方式完全不同,具体见IEEE754详解

代码语言:javascript
复制
var f float32 = 16777216 // 1 << 24
fmt.Println(f == f+1)    // "true"!

浮点数字面量可以使用十进制数字表示:

代码语言:javascript
复制
const e = 2.71828 // (非精确值)

小数点前面或者后面的数字都可以省略,例如:.707 , 1. ,对于那种很小或者很大的数值最好用科学计数法,在指数前加上e或者E:

代码语言:javascript
复制
const Avogadro = 6.02214129e23  // 阿伏伽德罗常数
const Planck   = 6.62606957e-34 // 普朗克常数

fmt打印浮点数时,若使用%g参数,会采用更高的精度更紧凑的表现形式进行打印,但是在打印表格数据时,%e(指数)或者%f(非指数的)的形式可能更合适,上面三个参数都可以控制打印的宽度和精度:

代码语言:javascript
复制
for x := 0; x < 8; x++ {
    fmt.Printf("x = %d e^x = %8.3f\n", x, math.Exp(float64(x)))
}

上面的代码使用了小数点后3位的精度进行打印,打印宽度是8个字符:

代码语言:javascript
复制
x = 0   ex =    1.000
x = 1   ex =    2.718
x = 2   ex =    7.389
x = 3   ex =   20.086
x = 4   ex =   54.598
x = 5   ex =  148.413
x = 6   ex =  403.429
x = 7   ex = 1096.633

对于浮点数的使用,如果是服务器和客户端传输的话,直接用string类型传递数据最好,不用考虑截取的问题

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档