java - 12.1 可以精确地表示为一个 float 吗?

标签 java math floating-point numbers floating-accuracy

这是引用this question中的评论:

This code in Java produces 12.100000000000001 and this is using 64-bit doubles which can present 12.1 exactly. – Pyrolistical

这是真的吗?我觉得由于 float 表示为 2 的幂之和,因此无论您有多少位,都无法准确表示 12.1。但是,当我实现这两种算法并打印使用 (12.1, 3) 调用它们的结果时,我分别得到了他和我的:

12.10000000000000000000000000000000000000000000000000000000000000000000000000 12.1000000000000010000000000000000000000000000000000000000000000000000000000

我使用 String.format("%76f") 打印了这个。我知道零比必要的多,但我没有看到 12.1 中有任何舍入。

最佳答案

没有。正如其他人在他的评论后续中指出的那样,(有限数量的)2 次方的总和永远不会恰好等于 12.1。就像你不能用十进制精确表示 1/3 一样,无论你在小数点后使用多少位。

关于java - 12.1 可以精确地表示为一个 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904321/

相关文章:

java - 计算存储在数组中的所有相邻节点列表

java - 在 Hibernate QL 中否定一元运算符

c - 快速增加数字为 C 中的 mod 16

python - 通俗地说,Python 字符串格式 "g"实际上是什么意思?

c - 将 int 打印为 float 时 printf 的行为是什么?

java - 我应该在 Spring 项目中将哪些类转向 bean?

java - Rabbit spring cloud stream绑定(bind)主题到单队列

javascript - 计算 Javascript 时间与百分比之间的时间

c# - 在 C# 中对十进制数据类型执行数学运算?

math - ( Racket /计划)减法产生的结果非常小