在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
根据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.25
是2^-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。对此有什么解释吗?