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

mac*_*ian 20 java floating-point double int numbers

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

sgo*_*les 31

Double是一个包装类,

Double类在对象中包装基本类型double的值.Double类型的对象包含单个字段,其类型为double.

另外,这个类提供了几种方法,用于将double转换为String,将String转换为double,以及处理double时有用的其他常量和方法.

双数据类型,

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

检查每个数据类型及其范围:Java的原始数据类型.


重要说明:如果您考虑使用double来获取精确值,则需要在使用它之前重新思考.Java陷阱:加倍


Ste*_*n C 22

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

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

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


决定double与... 之间float

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

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

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

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


决定Double与... 之间Float

对于Double对比Float情况,精度和范围问题double与对比相同float,但相对性能指标会略有不同.

  • A Double(在32位机器上)通常需要16个字节+ 4个字节作为参考,而a + 12 + 4个字节Float.将此值与8个字节进行比较,double而对比float情况则为4个字节.所以这个比例是5比4比2比1.

  • 算术涉及Double并且Float通常涉及解除引用指针并创建一个新对象来保存结果(取决于具体情况).这些额外的管理费用也会影响有利于Double案件的比率.


正确性

说了这么多,最重要的是正确性,这通常意味着获得最准确的答案.即使准确性不重要,"过于准确"通常也没有错.因此,简单的"经验法则"是double优先使用float,除非有最重要的性能要求,并且您有充分的证据证明使用float会对该要求产生影响.


pax*_*blo 5

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

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

DoubleJava 中的A是 double 基本类型的类版本 - 您可以使用 doubles 但是,如果您想对它们做一些要求它们是对象的事情(例如将它们放入集合中),则需要将它们装箱他们在一个Double对象。