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