Java NumberFormat格式化float类型的bug

 更新时间:2018年10月22日 09:21:44   作者:李学凯  
今天小编就为大家分享一篇关于Java NumberFormat格式化float类型的bug,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

首先,这个NumberFormat这个类,可以格式化各种数字。你只要稍微设置一下,结果还是很理性的。

但是,他有那么一丢丢的bug,不知道你知道不?

  /**
   * 2.3F经过格式化,竟然变成2.99啦。what the fuck .
   * float类型的时候,值是2.3,但是一经变成Double,值就变成2.99999啦。
   * 这个format的参数是double类型的。所以,在传入参数的时候,就变成了对2.299999952316284进行操作。返回就过就是2.99
   */
  private static void floatFormatTest() {
    float responseTime = 2.3F;
    NumberFormat formatter;
    formatter = NumberFormat.getNumberInstance();
    formatter.setGroupingUsed(false);
    formatter.setRoundingMode(RoundingMode.FLOOR);
    formatter.setMaximumFractionDigits(2);
    String format = formatter.format(responseTime);
    System.out.println(format);
    float v = Float.parseFloat(formatter.format(responseTime));
    System.out.println(v);
  }

看下debug的时候,这个数字到底有啥出乎意料的变化。

这个时候,还是OK的。还是正常的。

看到啦没,这个2.3F,float类型的数,经过format的时候,自动变成double类型啦。然后,就不稳定啦。

经过取舍之后,2.3,就变成啦2.29啦

怎么规避这个问题

在使用这个BigDecimal的时候,传参数,要传字符串。不然还是不准确。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • Java jar打包工具使用方法步骤解析

    Java jar打包工具使用方法步骤解析

    这篇文章主要介绍了Java jar打包工具使用方法步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java实现基于UDP协议的聊天小程序操作

    java实现基于UDP协议的聊天小程序操作

    UDP是与TCP相对应的协议,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高,本文给大家介绍java实现基于UDP协议的聊天小程序操作,感兴趣的朋友一起看看吧
    2021-10-10
  • SpringBoot简单实现文件上传

    SpringBoot简单实现文件上传

    这篇文章主要介绍了SpringBoot简单实现文件上传,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09
  • Spring实战之让Bean获取Spring容器操作示例

    Spring实战之让Bean获取Spring容器操作示例

    这篇文章主要介绍了Spring实战之让Bean获取Spring容器操作,结合实例形式分析了Bean获取Spring容器的相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-11-11
  • 快速搭建一个SpringBoot项目(纯小白搭建教程)

    快速搭建一个SpringBoot项目(纯小白搭建教程)

    本文主要介绍了快速搭建一个SpringBoot项目,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java 多线程之两步掌握

    Java 多线程之两步掌握

    Java 多线程编程 Java给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
    2021-10-10
  • Java实践练习轻松几行实现追书神器

    Java实践练习轻松几行实现追书神器

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个追书神器,用技术改变生活,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • 学习Java的9张思维导图

    学习Java的9张思维导图

    这篇文章主要为大家详细介绍了学习Java的9张思维导图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java控制台实现猜拳游戏小游戏

    Java控制台实现猜拳游戏小游戏

    这篇文章主要为大家详细介绍了Java控制台实现猜拳游戏小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • JavaTCP上传文本文件代码

    JavaTCP上传文本文件代码

    今天小编就为大家分享一篇关于JavaTCP上传文本文件代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论