当前位置: 首页 > 知识库问答 >
问题:

舍入和“Double.valueOf with float”

松烨烨
2023-03-14

在Java 6中,只有两个Double#valueOf方法:Double#valueOf(Double)Double#valueOf(String)

1-当我执行Double#valueOf(float)时,Witch方法正在调用?

根据Javadoc,它似乎是Double#value eOf(String),但Eclipse链接有Double#value eOf(Double)

2-为什么会有这些差异?

调用Double.value的与浮动轮的结果:

System.out.println(Double.valueOf(0.63F));  // displays 0.6299999952316284

鉴于

System.out.println(Double.valueOf(String.valueOf(0.63F)));  // displays 0.63

javadoc(http://docs.oracle.com/javase/6/docs/api/java/lang/Double.html#valueOf(java.lang.字符串))的摘录:

浮点文字0.1f等于双倍值0.10000000149011612

param中的字符串被视为在通常的“计算机化科学记数法”中表示精确的十进制值,或表示精确的十六进制值;然后,从概念上将该精确数值转换为“无限精确”的二进制值,然后按照IEEE 754浮点算术的常用四舍五入至最接近规则将其四舍五入为类型double


共有1个答案

萧晓博
2023-03-14

根据Javadoc,它似乎是Double#value eOf(String),但Eclipse链接有Double#value eOf(Double)

我找不到Javadoc中建议在这种情况下调用String重载的地方,但Eclipse是对的:没有从浮动String的隐式转换,但有一个隐式转换从浮动,因此双#value eOf(双)是正确的重载。

呼叫Double。结果四舍五入的值

它不会“舍入”结果,它会更改其表示形式以适应Double,具有更高的精度。但是,浮动都不能准确地表示0.1,因为它不能表示为2的负幂之和。如果您使用0.25而不是0.1,则不会发生这种情况,因为0.252^-2,因此可以在浮动中精确表示。

 类似资料:
  • 问题内容: 这两个电话有什么区别?(有没有?) 问题答案: 提到但没有直接解决的一个重要问题是 “精度” 和 “比例” 之间的区别以及它们在两个语句中的用法。 “精度” 是数字中有效数字的总数。 “比例” 是小数点右边的位数。 MathContext构造函数仅接受precision和RoundingMode作为参数,因此第一条语句中从未指定scale。 显然接受scale和RoundingMode

  • 问题内容: 这是小代码来说明我所看到的 打印: 我要打印 我需要做什么? 问题答案: 在使用之前添加以下行: 查看其他舍入模式,看看哪种最适合您。 注意:此方法仅在JDK 1.6或更高版本中有效

  • 问题内容: 在我的课程中,我被告知: 连续值大约在内存中表示,因此使用浮点数进行计算会产生舍入误差。这些是位模式的微小差异。因此,如果和为浮点,则测试是不安全的。 指的是Java。 这是真的?我已经将比较语句与s和s一起使用,并且从未遇到过舍入问题。我从来没有读过类似的教科书。虚拟机肯定占了这一切吗? 问题答案: 是真的。 这是如何在内存中以有限数量的位表示浮点值的固有限制。 例如,该程序显示“

  • 问题内容: 我想将双精度数四舍五入到一定数量的小数,总是四舍五入。 例 四舍五入到.00 => 1.5679999到1.56 四舍五入至.000 => 1.5679999至1.567 我想要一个Double而不是一个连接字符串 问题答案: 只需替换为!

  • 为什么四舍五入到 1 位的数字仍然写入具有许多位数的 Excel。 例如: 尽管我在写<code>myvar</code>,它已四舍五入到单元格A1的一位数字,尽管单元格显示4567.2,但单击单元格会显示整个值,所有数字位于公式栏尾数右侧。 我应该期待这种行为吗?

  • 我将以下代码与java BigDecimal setScale方法结合使用,并使用半\u偶数舍入模式,得到以下结果。 结果:1.11 预计:1.12 由于距离5最近的偶数数字应该是2,因此我预期的结果是1.12。但结果是1.11。再一次, 结果:1.15 预期:1.14 因为5左边的偶数是4,所以我希望结果是1.14。对此有什么解释吗?