【发布时间】:2011-06-12 02:22:57
【问题描述】:
我对 Java 非常陌生,只是想确认Double 是什么?它类似于 Float 或 Int 吗?任何帮助,将不胜感激。我有时也会看到大写的Double,有时会看到小写的double。如果有人能澄清这意味着什么,那就太好了!
【问题讨论】:
-
甚至许多 Java 工作都有同样的问题。干杯。
标签: java floating-point numbers int double
我对 Java 非常陌生,只是想确认Double 是什么?它类似于 Float 或 Int 吗?任何帮助,将不胜感激。我有时也会看到大写的Double,有时会看到小写的double。如果有人能澄清这意味着什么,那就太好了!
【问题讨论】:
标签: java floating-point numbers int double
在评论@paxdiablo 的回答时,您问:
“所以基本上,使用 Double 比 Float 更好吗?”
这是一个复杂的问题。我将分两部分处理它
double 和float 之间做出选择
一方面,double 占用 8 个字节,而 float 占用 4 个字节。如果你有很多,这可能很重要,尽管它也可能没有影响。 (考虑值在 64 位机器上的字段或局部变量中的情况,并且 JVM 在 64 位边界上对齐它们。)此外,使用 double 值的浮点运算通常比使用 float 值慢.. . 虽然这又一次取决于硬件。
另一方面,double 可以表示比 float 更大(和更小)的数字,并且可以以两倍以上的精度表示它们。详情请参考Wikipedia。
棘手的问题是知道您是否真的需要double 的额外范围和精度。在某些情况下,很明显您需要它。在其他情况下,它并不那么明显。例如,如果您正在执行诸如反转矩阵或计算标准偏差之类的计算,则额外的精度可能至关重要。另一方面,在某些情况下,即使double 也无法为您提供足够的精度。 (并且当心期望float 和double 给你一个准确的表示的陷阱。他们不会也不能!)
有一个数学分支称为数值分析,它处理实际数值计算中舍入误差等的影响。它曾经是计算机科学课程的标准部分……早在 1970 年代。
Double 和Float 之间做出选择
对于Double 与Float 的情况,精度和范围问题与double 与float 相同,但相对性能指标会略有不同。
Double(在 32 位机器上)通常需要 16 字节 + 4 字节作为引用,而 Float 需要 12 + 4 字节。将此与 double 与 float 案例的 8 字节与 4 字节进行比较。所以 比率 是 5 比 4 与 2 比 1。
涉及Double 和Float 的算术通常涉及取消引用指针并创建一个新对象来保存结果(取决于具体情况)。这些额外的开销也会影响有利于Double 案例的比率。
说了这么多,最重要的是正确性,而这通常意味着得到最准确的答案。而且即使准确性不重要,“太准确”通常也没有错。因此,简单的“经验法则”是使用double 而不是float,除非有压倒性 的性能要求,并且您有确凿的证据表明使用float 会产生关于该要求的差异。
【讨论】:
Double 是一个包装类,
Double 类包装了 对象中的原始类型 double。一个 Double 类型的对象包含一个 类型为 double 的单个字段。
此外,该类提供 几种转换a的方法 double 到 String 和 String 到 a 双倍,以及其他常数和 处理a时有用的方法 双倍。
双精度数据类型是 双精度 64 位 IEEE 754 浮点。它的取值范围是 4.94065645841246544e-324d 到 1.79769313486231570e+308d(正或负)。 对于十进制值,此数据类型为 一般是默认选择。作为 上面提到,这种数据类型应该 永远不要用于精确值,例如 作为货币。
检查每个数据类型及其范围:Java's Primitive Data Types。
重要提示:如果您考虑使用双精度值,则需要在使用前重新考虑。 Java Traps: double
【讨论】:
double 是IEEE754 双精度浮点数,类似于浮点数,但范围和精度更大。
IEEE754 单精度数有 32 位(1 个符号、8 个指数和 23 个尾数位),而双精度数有 64 位(1 个符号、11 个指数和 52 个尾数位)。
Java 中的 Double 是 double 基本类型的类版本 - 您可以使用双精度,但是,如果您想对它们做一些需要它们成为对象的事情(例如将它们放在集合中),您需要将它们装箱在 Double 对象中。
【讨论】:
Double 比使用Float 更好吗?