java中为什么小数运算丢失精度,丢失精度却为何能精确输出

Java中,小数运算可能丢失精度是由于二进制表示的限制,特别是对于不能精确表示的十进制小数。然而,即使精度丢失,通过打印输出时,变量在内存中的固定表示形式使得特定数值如0.7能够被精确显示。这是因为存储的二进制形式固定,无论变量如何赋值,其内存表示始终一致。
摘要由CSDN通过智能技术生成

为什么丢失精度

计算机运用二进制存储数据
十进制小数转二进制小数的办法

对小数点后的数乘以2,会得到一个成果,取成果的整数部分(不是1便是0),然后再用小数部分再乘以2,再取成果的整数部分……以此类推,直到小数部分为0或许位数现已够了。次序取每次运算得到的整数部分,即为转化后的小数部分。
演示:
0.125 ×2=0.25 …0
0.25×2=0.5…0
0.5×2=1.0…1
即 0.125的二进制表明为小数部分为0.001

其实咱们能够看出,这种办法实质上便是用1/2,1/4,8/1…来组合加出咱们要转化的数据值,但明显不是一切的数都能够组合出来的。如0.1。
0.1×2=0.2 …0
0.2×2=0.4 …0
0.4×2=0.8 …0
0.8×2=1.6…1
0.6×2=1.2…1
0.2×2=0.4…0

从上述能够看出,这是个无限小数,所以在这种情况下float、double只能舍去一些位。
但为什么System.out.println(2.00f-1.10f);得出的结果是0.9呢。因为float精度没有double精度那么大,小数部分0.1二进制表示被舍去的比较多

为什么能精确输出

public static void main(String[] args) {
   
        float a = 0.7f;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值