为什么大部分小数在计算机中是不精确的

在计算机中的运算是使用二进制来进行的,通常程序中的十进制数字是先转换成二进制,再进行运算的。在基本数据类型中,浮点型float和double是有小数部分的,在其小数部分转换成二进制的时候可能会进入无限循环,所以在取值的时候我们并不能够取到完整的值,只能取到无限接近于原值的近似值,从而导致其精度丢失,所以大部分的小数在计算机中都是不精确的。

Java中的小数用float和double表示,小数属于浮点型;

将一个小数转化为二进制表示的方式是,不断的乘2,取其中的整数部分:

(1) 0.625*2 = 1.25, 整数部分为1,小数部分为0.25

(2) 0.25 * 2 = 0.5 , 整数部分为0,小数部分为0.5

(3) 0.5 * 2 = 1 , 整数部分为1,小数部分为0

所以0.625的二进制表示就是0.101。

但数学的计算中0.1*0.1的结果应当是0.01;但是在计算机中打印出来的结果却是0.010000000000000002,这是为什么呢;主要原因是因为计算机中的存储和运算都是通过二进制实现的;而在二进制中不能精确表示0.1;只能保存一个无限接近0.1的数;所以得到的结果就是不精确的。
0.1转换为二进制小数则为:0.000110011001100...
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值