java round trip,Java往返String – > float – > String甚至(某些)值不能表示为float?

博客探讨了Java中浮点数表示与输出的精度问题。尽管IEEE754标准指出0.2的浮点近似值为0.20000000298023224,但Java在打印时会进行舍入,以显示为“0.2”。文章讨论了Java如何决定何时进行舍入以及这一行为背后的原理,同时提出了关于打印算法的疑问。
摘要由CSDN通过智能技术生成

给出的典型示例是“0.2”.根据这个漂亮的IEEE 754 Converter,最接近0.2的浮点数约为0.20000000298023224,因此解析“0.2”作为浮点数应该产生这个结果.

但是,我注意到Java似乎能够做到这一点:

String number="0.2";

float f = Float.parseFloat(number);

System.out.println("Result of roundtrip String -> float -> String: "+f);

打印:

Result of roundtrip String -> float -> String: 0.2

Java如何知道我想要(舍入)输出“0.2”,而不是如上所述的精确输出“0.20000000298023224”?

How many digits must be printed for the fractional part of m or a?

There must be at least one digit to represent the fractional part,and

beyond that as many,but only as many,more digits as are needed to

uniquely distinguish the argument value from adjacent values of type

float.

不幸的是,这让我更加困惑.为什么“打印尽可能多的数字来唯一区分参数值”允许Java打印“0.2”?

理想情况下,答案也可以解释为什么选择此打印算法.这个例子是(一些)往返工作吗?还有其他动机吗?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值