究竟什么Double在java中意味着什么?

时间:2011-06-12 02:22:58

标签: java floating-point numbers int double

我是Java的新手,只想确认Double是什么?它与Float或Int类似吗?任何帮助,将不胜感激。我有时也会看到大写Double,有时看小写double。如果有人能够澄清这意味着什么是伟大的!

3 个答案:

答案 0 :(得分:28)

Double是一个包装类,

  

Double类包含了一个值   对象中的原始类型double。一个   Double类型的对象包含一个   单个字段,其类型为double。

     

此外,本课程提供   几种转换方法   double到String和String到a   double,以及其他常量和   处理a时有用的方法   双

double data type

  

双数据类型是a   双精度64位IEEE 754   浮点。它的价值范围是    4.94065645841246544e-324d至1.79769313486231570e + 308d(正面或负面)。   对于十进制值,此数据类型为   一般是默认选择。如   如上所述,这种数据类型应该   永远不会被用于精确的价值观   作为货币。

检查每个数据类型及其范围:Java's Primitive Data Types


重要提示:如果您考虑使用double来获取精确值,则需要在使用它之前重新思考。 Java Traps: double

答案 1 :(得分:22)

在评论@ paxdiablo的回答时,你问:

  

“所以基本上,使用Double而不是Float更好吗?”

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


doublefloat之间确定

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

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

棘手的问题是知道你是否真的需要 float的额外范围和精度。在某些情况下,很明显你需要它。在其他方面,它并不那么明显。例如,如果您正在进行诸如反转矩阵或计算标准偏差之类的计算,则额外的精度可能是至关重要的。另一方面,在某些情况下,甚至double都不会给你足够的精确度。 (并注意期待doublefloat给你一个确切代表的陷阱。他们不会,他们不能!)

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


doubleDouble之间确定

对于FloatDouble的情况,精度和范围问题与Floatdouble相同,但相对效果指标会略有不同。

  • float(在32位机器上)通常需要16个字节+ 4个字节作为参考,而Double则为12 + 4个字节。将此值与8 Floatdouble情况的4字节进行比较。所以比率是5到4而不是2比1.

  • 涉及floatDouble的算术通常涉及取消引用指针并创建一个新对象来保存结果(取决于具体情况)。这些额外的开销也会影响Float案例的比率。


正确性

说了这么多,最重要的是正确性,这个通常意味着获得最准确的答案。即使准确性不重要,“过于准确”通常也没有错。因此,简单的“经验法则”是优先使用Double double,除非有覆盖性能要求,并且您有充分证据表明使用{{ 1}}将对该要求产生影响。

答案 2 :(得分:3)

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

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

Java中的Double是双基本类型的类版本 - 您可以使用双精度但是,如果您想对它们执行某些操作,需要将它们作为对象(例如将它们放在集合中) ),你需要在Double对象中打包它们。