go big.int 转float_Go自学之入门系列三数据类型(浮点、布尔)

浮点

  1. go语言中提供了两种浮点型
  • float32 --用32位(4个字节)来存储
  • float64 --用64位(8个字节)来存储

float计算是非精确的

        v1:=0.1
	v2:=0.2
	result:=v1+v2
	fmt.Println(result)//0.30000000000000004

	v3:=0.2
	v4:=0.3
	result1:=v3+v4
	fmt.Println(result1)//0.5

2.float底层原理

第一步:浮点型转换为二进制

例如:0.3

  • 整数部分直接转换 ,二进制位0
  • 小数部分,乘以2,如果小于1,则继续乘以2,如果大于1,则减去1,在乘以2,直到结果为1为止。也有可能循环下去,得到每个值得整数部分拼接起来就是小数部分,二级制位:010011 (或者传统方式,除2取余,倒叙排列得的二进制)
0.3 * 2 = 0.6
0.6 * 2 = 1.2 (减去1,还剩0.2)
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6 (减去1,还剩0.6)
0.6 * 2 = 1.2 
... 

整数部分二进制和小数部分二进制拼接起来:0.010011...

第二步:科学计数法

0.010011... 需要往右移动2位

1.0011 *

第三步:存储(以float32位为例)

9cfdd116a35ac1617f586283267592f5.png
  • sign , 存正负,0正数,1负数
  • exponent ,存指数部分,这是是-2, 8位,共有256种可能,-2+127 = 125 转 二进制存入(不知道为啥这样)
  • fraction,存储23位,把小数点后的数据存进去,多余的舍去,导致精度不精。

float64位:sign 1位,exponent 11位,fraction 52位

3.decimal

go语言内部没有decimal ,需要使用第三方包:shopspring/decimal

安装第三方包

go get github.com/shopspring/decimal

下载文件会在src中,编译后的文件存在pkg文件中

使用decimal

	v1:=decimal.NewFromFloat(0.1)
	v2:=decimal.NewFromFloat(0.2)
	result1:=v1.Add(v2)//加
	result2:=v1.Sub(v2)//减
	result3:=v1.Mul(v2)//乘
	result4:=v1.Div(v2)//除

	fmt.Println(result1,result2,result3,result4)//0.3 -0.1 0.02 0.5

	v3:=decimal.NewFromFloat(0.25432)
	v4:=v3.Round(1)//0.3 保留一位小数,四舍五入
	v5:=v3.Truncate(1)//0.2 保留一位小数,其他舍弃
	fmt.Println(v4,v5)

布尔类型

        result,err:=strconv.ParseBool("true")
	fmt.Println(result,err)//true <nil>

	result1 := strconv.FormatBool(true)
	fmt.Println(result1,reflect.TypeOf(result1))//true,string,转成string了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值