Java关于浮点数的舍入法与String.format()在不同jdk版本的区别

博客讨论了Java中浮点数的存储方式和银行家舍入法,指出在JDK 8与Android 5.1上使用String.format()进行浮点数四舍五入操作时结果不同。文章通过代码示例和方法调用跟踪,证明了精度损失和不同JDK版本间舍入方式的差异,并建议使用BigDecimal(String)进行高精度运算。
摘要由CSDN通过智能技术生成

1. 前提知识

  1. 浮点数在计算机中是以二进制的形式存储的,大部分浮点数都无法精确表达
  2. 银行家舍入法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一

2. 碰到的问题

我在对浮点数做保留两位小数并四舍五入的操作时,测试的时候发现在JDK 8和Android 5.1上得到的值是不一样的。
代码:

public static void main(String[] args) {
    System.out.println(String.format("5.585f -> %.2f", 5.585f));
    System.out.println(String.format("5.535f -> %.2f", 5.535f));
    System.out.println(String.format("5.545f -> %.2f", 5.545f));
    System.out.println(String.format("5.555f -> %.2f", 5.555f));
    System.out.println("------------------------------");

    System.out.println(String.format("5.585 -> %.2f", Double.valueOf(String.valueOf(5.585f))));
    System.out.println(String.format("5.535 -> %.2f", Double.valueOf(String.valueOf(5.535f))));
    System.out.println(String.format("5.545 -> %.2f", Double.valueOf(String.valueOf(5.545f))));
    System.out.println(String.format("5.555 -> %.2f", Double.valueOf(String.valueOf(5.555f))));
    System.out.println("------------------------------");

    System.out.println(String.format("558.5f -> %.0f", 558.5f));
    System.out.println(String.format("553.5f -> %.0f", 553.5f));
    System.out.println(String.format("554.5f -> %.0f", 554.5f));
    System.out.println(String.format("555.5f -> %.0f", 555.5f));
    System.out.println("------------------------------");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值