在Java中,Double是一个数据类型,它可以存储一个双精度浮点数。

29
我对Java非常陌生,只是想确认一下Double是什么?它是否类似于Float或Int?任何帮助都将不胜感激。我有时也会看到大写的Double和小写的double。如果有人能够澄清这意味着什么,那就太好了!

4
请查看http://download.oracle.com/javase/tutorial/java/data/numberclasses.html获取更多信息。 - Bala R
即使很多 Java 工作也有同样的问题。干杯! - kta
3个回答

37

Double是一个包装类,

Double类用于将原始类型double的值封装在对象中。类型为Double的对象包含一个double类型的字段。

此外,该类还提供了几种将double转换为String和String转换为double的方法,以及其他在处理double时有用的常量和方法。

double数据类型

double数据类型是双精度64位IEEE 754浮点型。它的值范围是4.94065645841246544e-324d到1.79769313486231570e+308d(正或负)。对于十进制值,通常使用此数据类型作为默认选择。如上所述,此数据类型不应用于精确值(例如货币)。

使用其范围检查每个数据类型: Java的基本数据类型


重要说明:如果您想使用double类型来表示精确值,请在使用之前重新考虑。Java陷阱:double


那它代表数字吗? - maclunian
@ 是一个表示数字的符号。请查看 Number 类:http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Number.html - Saurabh Gokhale

29

在@paxdiablo的回答中,您发表了评论:

"所以基本上使用Double比Float更好吗?"

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


doublefloat 之间做出决策

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

另一方面,double 可以表示比 float 更大(和更小)的数字,并且可以用超过两倍的精度来表示它们。有关详细信息,请参阅 Wikipedia

棘手的问题是知道您是否实际上需要 double 的额外范围和精度。在某些情况下,显然需要它。在其他情况下,就不那么明显了。例如,如果您正在进行诸如求逆矩阵或计算标准差之类的计算,则额外的精度可能至关重要。另一方面,在某些情况下,即使是 double 也无法给您足够的精度。(并且要注意期望 floatdouble 给您提供精确表示的陷阱。它们不会,也不能!)

有一门数学分支叫做数值分析,它处理实际数值计算中的舍入误差等问题。在20世纪70年代,它曾是计算机科学课程的标准组成部分。


如何选择 DoubleFloat

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

  • Double(在 32 位机器上)通常需要 16 字节 + 4 字节的引用,而 Float 则需要 12 + 4 字节。与 doublefloat 情况相比,8 字节对 4 字节,因此比例为 5:4 而不是 2:1。

  • 涉及 DoubleFloat 的算术运算通常涉及解除引用指针并创建新对象以保存结果(具体取决于情况)。这些额外开销也会使 Double 的比例更好。


正确性

说了这么多,最重要的是正确性,通常意味着得到最准确的答案。即使准确性并不关键,过于准确通常也不会有错。因此,简单的“经验法则”是优先使用double,除非有优先的性能要求,并且您有确凿的证据表明使用float将在满足该要求方面产生差异。


6

双精度浮点数是一种IEEE754双精度浮点数,类似于浮点数但具有更大的范围和精度。

IEEE754单精度数有32位(1个符号位,8个指数位和23个尾数位),而双精度数有64位(1个符号位,11个指数位和52个尾数位)。

Java中的Double是基本类型double的类版本-您可以使用双精度数,但如果要对它们进行需要对象的操作(例如将它们放入集合中),则需要将它们装箱为Double对象。


那么基本上,使用 Double 比使用 Float 更好吗? - maclunian
1
@maclunian:Float是包装类,float是原始数据类型。请访问上述Oracle链接。您将获得所有的区别。 - Saurabh Gokhale
1
@maclunian,这是一个权衡。显然,双精度占用的空间是两倍,并且在计算方面可能会更慢,但它们提供了更大的范围和精度。您应该在必要时使用双精度(与任何数据类型一样)。 - paxdiablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接