当前位置: 首页 > 面试题库 >

用Java解析Float的正确方法是什么

富钧
2023-03-14
问题内容

我注意到Java浮点精度的一些问题

       Float.parseFloat("0.0065") - 0.001  // 0.0055000000134110451
       new Float("0.027") - 0.001          // 0.02600000000700354575
       Float.valueOf("0.074") - 0.001      // 0.07399999999999999999

我不仅有问题,Float而且也有问题Double

有人可以解释幕后发生的事情吗,我们如何获得准确的数字?处理这些问题时正确的方法是什么?


问题答案:

问题是float精度有限。它不能完全代表0.0065。(double当然,也是如此:它具有更高的精度,但仍然是有限的。)

使上述问题更加明显的另一个问题0.001是a double而不是a
float,因此您float将被提升为double执行减法的操作,当然,此时系统无法恢复a所丢失的精度。double 本来
可以代表的。为了解决这个问题,您可以编写:

float f = Float.parseFloat("0.0065") - 0.001f;

使用0.001f代替0.001



 类似资料:
  • 问题内容: 我正在与我的CompSci教授交谈,他建议将所有String 方法编写为: 而不是: 这两行都可以编译,但是我想知道第一种方法的好处是什么?我一直都是后一种方式。错了吗 什么是普通/常规? 问题答案: 第一种方法确保执行比较时不会收到 NullPointerException 。当您尝试在不存在的对象上调用方法时,抛出(发生)此异常。 以下是一些相关的切线:仔细阅读风险自负 不过要注意

  • 问题内容: 许多Java jar中包含的manifest.mf包含类似于电子邮件标题的标题。参见示例[*] 我想要一些可以将这种格式解析为键值对的东西: 我已经在Google上搜索了“ parse manifest.mf”,“ manifest.mf格式”等内容,并且发现了很多有关标头含义的信息(例如,在OSGI包,标准Java jar等中),但是那不是什么我在找。 看一些示例manifest.m

  • 这就是我目前拥有所有实体类的方式(此处仅显示一个以供参考) 来自lombok参考: @Data注释可能是项目Lombok工具集中最常用的注释。它结合了@ToString、@EqualsAndHashCode、@Getter和@Setter的功能。本质上,在类上使用@数据与使用默认的@ToString和@EqualsAndHashCode注释该类以及使用@Getter和@Setter注释每个字段是一

  • 问题内容: 即使在使用Java Swing一年以上之后,对我来说,它仍然像魔术一样。如何正确使用BufferStrategy,尤其是方法? 我想添加一个JFrame和一个Canvas,然后进行绘制。我还希望能够调整()画布的大小。每次我调整Canvas的大小时,似乎都会被浪费掉,或者变得毫无用处,因为在上使用并没有真正做任何事情。另外,它具有怪异的不确定性行为,我不知道如何正确同步它。 这就是我的

  • 问题内容: 我想在Linux上使用该机制。我希望我的应用程序知道何时更改了文件。能否请您提供给我一个示例,该怎么做? 问题答案: 文档(来自具有inotify的Monitor文件系统活动) 在C API 提供了三个系统调用来构建各种文件系统监视器: 在内核中创建子系统的实例,并在成功和失败时返回文件描述符。与其他系统调用一样,如果失败,请检查诊断。 顾名思义,它增加了一块 手表 。每个监视都必须提

  • 问题内容: 需要帮助,以了解如何在UIKit中使用prepareForReuse()。该文件说 您只应重置与内容无关的单元格属性,例如Alpha,编辑和选择状态 但是如何重置单个属性属性(例如isHidden)呢? 假设我的单元格有2个标签,我应该在哪里重置: 标签文本 label.numberOfLines label.isHidden 我的tableView(_:cellForRowAt :)