浮点类型(小数类型)
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。

LUA浮点数最大多大 浮点数最大数_LUA浮点数最大多大


一个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]

LUA浮点数最大多大 浮点数最大数_浮点数_02

  1. 浮点型的存储分为三部分:符号位+指数位+尾数位 在存储过程中,精度会有丢失

LUA浮点数最大多大 浮点数最大数_LUA浮点数最大多大_03

浮点型使用细节

  1. Golang 浮点类型有固定的范围和字段长度,不受具体OS(操作系统)的影响。
  2. Golang 的浮点型默认声明为float64 类型。
  3. 浮点型常量有两种表示形式 十进制数形式:如:5.12 .512 (必须有小数点) 科学计数法形式:如:5.12e2 = 5.12 * 10的2次方 5.12E-2 = 5.12/10的2次方

LUA浮点数最大多大 浮点数最大数_LUA浮点数最大多大_04

  1. 通常情况下,应该使用 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
}