您的位置:首页 > 编程语言 > Go语言

5.Go语言基本类型 —— 浮点型

2019-06-11 23:18 197 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/FHD994603831/article/details/91482338

浮点类型(小数类型)
Go语言支持两种浮点型数:float32 和 float64。这两种浮点型数据格式遵循 IEEE 754 标准:

  1. float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32。
  2. float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64。

取值范围
这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的范围极限值可以在math包找到。常量 math.MaxFloat32表示float32能表示的最大数值,大约是 3.403e38;对应的math.MaxFloat64常量大约是 1.798e308。它们分别能表示的最小值近似为 -3.403e38和 -1.798e308。

一个float32类型的浮点数可以提供大约6个十进制数的精度,而float64则可以提供约15个十进制数的精度。

函数math.IsNaN用于测试一个数是否是非数NaN,math.NaN则返回非数对应的值。虽然可以用math.NaN来 表示一个非法的结果,但是测试一个结果是否是非数NaN则是充满风险的,因为NaN和任何数都是不相等的。 如果一个函数返回的浮点数结果可能失败,最好的做法是用单独的标志报告失败。

nan := math.NaN()
fmt.Println(nan == nan, nan < nan, nan > nan) // "false false false"

对浮点数的说明

  1. 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
  2. 尾数部分可能丢失,造成精度损失。 -123.0000901 [-1238888887788999.0000901]
  3. 浮点型的存储分为三部分:符号位+指数位+尾数位 在存储过程中,精度会有丢失

浮点型使用细节

  1. Golang 浮点类型有固定的范围和字段长度,不受具体OS(操作系统)的影响。
  2. Golang 的浮点型默认声明为float64 类型。
  3. 浮点型常量有两种表示形式
    十进制数形式:如:5.12 .512 (必须有小数点)
    科学计数法形式:如:5.12e2 = 5.12 * 10的2次方 5.12E-2 = 5.12/10的2次方
  4. 通常情况下,应该使用 float64 ,因为它比float32 更精确。[开发中,推荐使用float64]

处理精度方法
处理精度的几种方法:

1: float 转 decimal 类型,decimal 互乘 不会丢失精度
2: float 乘 float 后,进行四舍五入 只保留需要的位数

var refundFee, _ = strconv.ParseFloat("1129.6", 64)
log.Println(refundFee) //1129.6   float类型
f1 := decimal.NewFromFloat(refundFee)
log.Println(f1)  //1129.6  decimal 类型
f2 := decimal.NewFromFloat(100)
log.Println(f1.Mul(f2)) // 112960 decimal 类型

log.Println(refundFee * 100) //112959.99999999999

var s = Round(refundFee*100, 2)
log.Println(s)     // 112960

// f:需要处理的浮点数,n:要保留小数的位数
// Pow10()返回10的n次方,最后一位四舍五入,对n+1位加0.5后四舍五入
func Round(f float64, n int) float64 {
n10 := math.Pow10(n)
return math.Trunc((f+0.5/n10)*n10) / n10
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: