Leo*_*Leo 212 java floating-point double ieee-754
浮点数据类型是单精度32位IEEE 754浮点数,双数据类型是双精度64位IEEE 754浮点数.
这是什么意思?什么时候应该使用float而不是double,反之亦然?
Mak*_*oto 246
在维基百科页面上它是一个良好的开端.
总结一下:
float
以32位表示,具有1个符号位,8位指数和23位有效数字(或者从科学符号数字开始:2.33728*10 12 ; 33728是有效数字).
double
以64位表示,具有1个符号位,11位指数和52位有效数.
默认情况下,Java用于double
表示其浮点数字(因此3.14
输入文字double
).它也是一种数据类型,可以为您提供更大的数字范围,因此我强烈建议使用它float
.
有可能是某些库,实际上迫使你的使用float
,但一般-除非你能保证你的结果将是足够小,以适应float
的规定范围,那么最好选择是否同意double
.
如果你需要准确性 - 例如,你不能有一个不准确的十进制值(比如1/10 + 2/10
),或者你正在用货币做任何事情(例如,在系统中代表$ 10.33),那么使用a BigDecimal
,它可以支持任意数量的精度和优雅的处理情况.
Ye *_*Win 13
在计算需要小数精度的表达式时,将使用浮点数(也称为实数).例如,诸如平方根之类的计算或诸如正弦和余弦之类的超级因子导致其精度需要浮点类型的值.Java实现了标准(IEEE-754)浮点类型和运算符集.有两种浮点类型,float和double,分别代表单精度和双精度数.它们的宽度和范围如下所示:
Name Width in Bits Range
double 64 1 .7e–308 to 1.7e+308
float 32 3 .4e–038 to 3.4e+038
Run Code Online (Sandbox Code Playgroud)
浮动
float类型指定使用32位存储的单精度值.单精度在某些处理器上更快,占用的空间是双精度的一半,但是当值非常大或非常小时,将变得不精确.当您需要小数组件但不需要很高的精度时,float类型的变量很有用.
以下是一些示例浮点变量声明:
浮动hightemp,lowtemp;
双
双精度(由double关键字表示)使用64位来存储值.在一些针对高速数学计算进行了优化的现代处理器上,双精度实际上比单精度更快.所有超越数学函数(如sin(),cos()和sqrt())都返回double值.当您需要在许多迭代计算中保持准确性或正在操纵大值数字时,double是最佳选择.
这会报错:
public class MyClass {
public static void main(String args[]) {
float a = 0.5;
}
}
Run Code Online (Sandbox Code Playgroud)
/MyClass.java:3: 错误:不兼容的类型:可能从 double 到 float float a = 0.5 有损转换;
这将完美地工作
public class MyClass {
public static void main(String args[]) {
double a = 0.5;
}
}
Run Code Online (Sandbox Code Playgroud)
这也能完美地工作
public class MyClass {
public static void main(String args[]) {
float a = (float)0.5;
}
}
Run Code Online (Sandbox Code Playgroud)
原因:Java默认将实数存储为double以确保更高的精度。
Double 占用更多空间,但在计算过程中更精确,而 float 占用更少空间,但精度较低。