float数据类型是单精度32位IEEE 754浮点数,double数据类型是双精度64位IEEE 754浮点数。
这是什么意思?什么时候应该使用float而不是double,反之亦然?
float数据类型是单精度32位IEEE 754浮点数,double数据类型是双精度64位IEEE 754浮点数。
这是什么意思?什么时候应该使用float而不是double,反之亦然?
当前回答
这将给出错误:
public class MyClass {
public static void main(String args[]) {
float a = 0.5;
}
}
/MyClass.java:3:错误:不兼容的类型:从double类型到float类型的可能有损转换 浮动a = 0.5;
这将工作得非常好
public class MyClass {
public static void main(String args[]) {
double a = 0.5;
}
}
这也会工作得很好
public class MyClass {
public static void main(String args[]) {
float a = (float)0.5;
}
}
原因:Java默认将实数存储为double,以确保更高的精度。
在计算过程中,Double占用更多空间但更精确,float占用更少空间但更精确。
其他回答
浮点数给你大约。6-7个十进制数字的精度,而双精度给你大约。15 - 16岁。对于double,数字的范围也更大。
double类型需要8个字节的存储空间,而float类型只需要4个字节。
这将给出错误:
public class MyClass {
public static void main(String args[]) {
float a = 0.5;
}
}
/MyClass.java:3:错误:不兼容的类型:从double类型到float类型的可能有损转换 浮动a = 0.5;
这将工作得非常好
public class MyClass {
public static void main(String args[]) {
double a = 0.5;
}
}
这也会工作得很好
public class MyClass {
public static void main(String args[]) {
float a = (float)0.5;
}
}
原因:Java默认将实数存储为double,以确保更高的精度。
在计算过程中,Double占用更多空间但更精确,float占用更少空间但更精确。
在常规编程计算中,我们不使用浮点数。如果我们确保结果范围在浮点数据类型的范围内,那么我们可以选择一个浮点数据类型来节省内存。一般来说,我们使用double的原因有两个:-
If we want to use the floating-point number as float data type then method caller must explicitly suffix F or f, because by default every floating-point number is treated as double. It increases the burden to the programmer. If we use a floating-point number as double data type then we don’t need to add any suffix. Float is a single-precision data type means it occupies 4 bytes. Hence in large computations, we will not get a complete result. If we choose double data type, it occupies 8 bytes and we will get complete results.
float和double数据类型都是专门为科学计算设计的,在科学计算中,近似误差是可以接受的。如果精度是最优先考虑的问题,那么建议使用BigDecimal类而不是float或double数据类型。Java中的浮点和双数据类型
关于它的维基百科页面是一个很好的开始。
总结如下:
Float用32位表示,其中1位符号位,8位指数位和23位有效位(或者从科学计数数后面跟随:2.33728*1012;33728是有效值)。 Double用64位表示,其中1个符号位、11个指数位和52个有效位。
默认情况下,Java使用double来表示浮点数(因此文字3.14被键入为double)。它也是一种数据类型,会给你一个更大的数字范围,所以我强烈建议使用它而不是float。
可能会有某些库强制你使用float,但一般来说——除非你能保证你的结果足够小,适合float的规定范围,否则最好选择double。
如果您需要精度—例如,您不能使用不准确的十进制值(如1/10 + 2/10),或者您正在处理与货币相关的任何事情(例如,在系统中表示10.33美元),那么使用BigDecimal,它可以支持任意数量的精度并优雅地处理此类情况。
根据IEEE标准,float是实数的32位表示,而double是64位表示。
在Java程序中,我们通常看到双数据类型的使用。这只是为了避免溢出,因为使用double数据类型可以容纳的数字范围比使用float时的范围更大。
同样,当要求高精度时,鼓励使用double。很少有很久以前实现的库方法仍然要求必须使用float数据类型(这只是因为它是使用float实现的,没有别的!)。
但是如果你确定你的程序需要很小的数字,并且使用float不会发生溢出,那么使用float将极大地提高你的空间复杂性,因为float所需要的内存是所需要的两倍。