double 二进制 java_为什么 Java 直接输出一个(二进制无法表示的)浮点数不会丢失精度?...

本文探讨了在Java中直接输出(二进制无法精确表示的)浮点数时为何不会丢失精度的问题。通过示例代码展示了0.1f, 0.2f, 0.1d, 0.2d及其相加结果在二进制表示下的变化,解释了浮点数在二进制转换过程中可能导致的精度差异。" 52748342,5527837,Java通过JDBC连接Spark SQL (HiveServer2) 实践,"['Spark开发', '数据库连接', 'Java编程', 'Hive配置', 'SQL查询']
摘要由CSDN通过智能技术生成

8

2018-07-12 17:24:25 +08:00   b7048e5c0150a989fed46971f5ac1886.png 1

@theochoi 0.1 + 0.2

System.out.println("Max: " + Integer.toString(Float.floatToIntBits(Float.MAX_VALUE), 2));

System.out.println("1f: " + Integer.toString(Float.floatToIntBits(1f), 2));

System.out.println("0.1f: " + Integer.toString(Float.floatToIntBits(0.1f), 2));

System.out.println("0.2f: " + Integer.toString(Float.floatToIntBits(0.2f), 2));

System.out.println("0.1f + 0.2f: " + Integer.toString(Float.floatToIntBits(0.1f + 0.2f), 2));

System.out.println("0.3f: " + Integer.toString(Float.floatToIntBits(0.3f), 2));

System.out.println("1d: " + Long.toString(Double.doubleToLongBits(1d), 2));

System.out.println("0.1d: " + Long.toString(Double.doubleToLongBits(0.1d), 2));

System.out.println("0.2d: " + Long.toString(Double.doubleToLongBits(0.2d), 2));

System.out.println("0.1d + 0.2d: " + Long.toString(Double.doubleToLongBits(0.1d + 0.2d), 2));

System.out.println("0.3d: " + Long.toString(Double.doubleToLongBits(0.3d), 2));

个人理解:

0.1d+0.2d 的时候各自都比较精细,导致了一个更精细的 2 进制值,而这个值又不是和显示 0.3d 对应的值相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值