Java中的Double到底是啥意思?
Posted
技术标签:
【中文标题】Java中的Double到底是啥意思?【英文标题】:What exactly does Double mean in java?Java中的Double到底是什么意思? 【发布时间】:2011-09-13 06:23:36 【问题描述】:我对 Java 非常陌生,只是想确认Double
是什么?它类似于 Float 或 Int 吗?任何帮助,将不胜感激。我有时也会看到大写的Double
,有时会看到小写的double
。如果有人能澄清这意味着什么,那就太好了!
【问题讨论】:
见download.oracle.com/javase/tutorial/java/data/… 甚至许多 Java 工作都有同样的问题。干杯。 【参考方案1】:在评论@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
将产生关于该要求的差异。
【讨论】:
【参考方案2】:Double 是一个包装类,
Double 类包装了 对象中的原始类型 double。一个 Double 类型的对象包含一个 类型为 double 的单个字段。
此外,该类提供 几种转换a的方法 double 到 String 和 String 到 a 双倍,以及其他常数和 处理a时有用的方法 双倍。
double data type,
双精度数据类型是 双精度 64 位 IEEE 754 浮点。它的取值范围是 4.94065645841246544e-324d 到 1.79769313486231570e+308d(正或负)。 对于十进制值,此数据类型为 一般是默认选择。作为 上面提到,这种数据类型应该 永远不要用于精确值,例如 作为货币。
检查每个数据类型及其范围:Java's Primitive Data Types。
重要提示:如果您考虑使用双精度值,则需要在使用前重新考虑。 Java Traps: double
【讨论】:
那么它代表数字吗? @ Yes .. 它代表一个数字。查看 Number 类:download.oracle.com/javase/1.4.2/docs/api/java/lang/Number.html【参考方案3】:double 是IEEE754 双精度浮点数,类似于浮点数,但范围和精度更大。
IEEE754 单精度数有 32 位(1 个符号、8 个指数和 23 个尾数位),而双精度数有 64 位(1 个符号、11 个指数和 52 个尾数位)。
Java 中的 Double
是 double 基本类型的类版本 - 您可以使用双精度,但是,如果您想对它们做一些需要它们成为对象的事情(例如将它们放在集合中),您需要将它们装箱在 Double
对象中。
【讨论】:
所以基本上,使用Double
比使用Float
更好吗?
@maclunian : Float 是包装类,float 是原始数据类型。请访问上面提到的 oracle 链接。你会得到所有的不同。
@maclunian,这是一个权衡。显然,双精度数占用两倍的空间,可能计算速度较慢,但确实提供了更大的范围和精度。您应该在必要时使用双精度数(与 any 数据类型相同)。以上是关于Java中的Double到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章