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 更好吗?”

这是一个复杂的问题。我将分两部分处理它


doublefloat 之间做出选择

一方面,double 占用 8 个字节,而 float 占用 4 个字节。如果你有很多,这可能很重要,尽管它也可能没有影响。 (考虑值在 64 位机器上的字段或局部变量中的情况,并且 JVM 在 64 位边界上对齐它们。)此外,使用 double 值的浮点运算通常比使用 float 值慢.. . 虽然这又一次取决于硬件。

另一方面,double 可以表示比 float 更大(和更小)的数字,并且可以以两倍以上的精度表示它们。详情请参考Wikipedia。

棘手的问题是知道您是否真的需要double 的额外范围和精度。在某些情况下,很明显您需要它。在其他情况下,它并不那么明显。例如,如果您正在执行诸如反转矩阵或计算标准偏差之类的计算,则额外的精度可能至关重要。另一方面,在某些情况下,即使double 也无法为您提供足够的精度。 (并且当心期望floatdouble 给你一个准确的表示的陷阱。他们不会也不能!)

有一个数学分支称为数值分析,它处理实际数值计算中舍入误差等的影响。它曾经是计算机科学课程的标准部分……早在 1970 年代。


DoubleFloat 之间做出选择

对于DoubleFloat 的情况,精度和范围问题与doublefloat 相同,但相对性能指标会略有不同。

Double(在 32 位机器上)通常需要 16 字节 + 4 字节作为引用,而 Float 需要 12 + 4 字节。将此与 doublefloat 案例的 8 字节与 4 字节进行比较。所以 比率 是 5 比 4 与 2 比 1。

涉及DoubleFloat 的算术通常涉及取消引用指针并创建一个新对象来保存结果(取决于具体情况)。这些额外的开销也会影响有利于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到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Java中compareTo是啥意思?

Java I/O 中的“Stream”和“Buffer”到底是啥意思?

街舞中Cypher到底是啥意思

java里的new到底是啥意思???

Java 中的实例到底是啥?

Java中的上下文到底是啥? [复制]