Golang float
最近在工作遇到float的精度问题,记录下解决思路
简介
浮点数数据格式有许多种,IEEE754标准的浮点数与IBM格式浮点数用的比较多
Go提供了两种size的浮点数,float32和float64.它们的算术规范是由IEEE754国际标准定义,现代CPU都实现了这个规范.
两个浮点数相加减,可能不准确
不是所有的float相加减乘除都一定出现偏差,具体要根据golang实现IEEE 754的情况定.
相减
x := 74.96
y := 20.48
b := x - y
fmt.Println(b) //output: 54.47999999999999
相加
var a = 0.6
fmt.Println(a + 0.7) //output: 1.2999999999999998var a
解决思路
尽量在设计之初,采用正确的设计方法.
例如比方说 1.1 元钱,
因为这个变量必须精确的等于十进制的 1.1,
而变量本身是二进制,可以考虑用精确到分的110来表示这个数字,避免了小数.
类似的,如果是计算器的话,如果用户是用十进制的格式输入,那么直接转换成二进制用计算机进行运算,最后再转换成十进制显示,这就不可避免的会有误差.\\