导航:首页 > 编程语言 > javafloat和double

javafloat和double

发布时间:2023-05-21 01:46:38

1. java double和float的区别

1、内存结构
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位)
8bits(指数位)
23bits(尾数位)
double:
1bit(符号位)
11bits(指数位)
52bits(尾数位)
于是,float的指数范围为-128~+127,而double的指数范围为-1024~+1023,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128
~
+2^127,也即-3.40e+38
~
+3.40e+38;double的范围为-2^1024
~
+2^1023,也即-1.79e+308
~
+1.79e+308。
2.
精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23
=
8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位数:
2*8388608
=
16777216
。有8位有效数字,但绝对能保证的为7位,也即
float的精度为7~8位有效数字
double:2^52
=
4503599627370496,一共16位,同理,
double的精度为16~17位
之所以不能用f1==f2来判断两个数相等,是因为虽然f1和f2在可能是两个不同的数字,但是受到浮点数表示精度的限制,有可能会错误的判断两个数相等!

2. 知乎 java float和double的区别

float a =10.23f;
double b=10.23;
1.float和double的区别:声明的float 的变量a,赋值后必须加:亏渗f ,如float a =10.23f;
而double则不需要,也就是谁double b=10.23;
2.double精确轿拍度比float大,double=10.23566558866557654556;
float=10.235665588665;销帆脊

3. java float double精度为什么会丢失

由于对float或double的使用不当,可能会出现精度丢失的问题。问题大概情况可以通过如下代码理解:


publicclassFloatDoubleTest{
publicstaticvoidmain(String[]args){
floatf=20014999;
doubled=f;
doubled2=20014999;
System.out.println("f="+f);
System.out.println("d="+d);
System.out.println("d2="+d2);
}
}


得到的结果如下:

f=2.0015E7
d=2.0015E7
d2=2.0014999E7

从输出结果可以看出double可以正确亮信的表示20014999,而float没有办法表示20014999,得到的只是一个近似值。这样的结果很让人讶异。20014999这么小的数字在float下没办法表示。于是带着这个问题,做了一次关于float和double学习,做个简单分享,希望有助于大家对java浮点数的理解。

关于java的float和double

Java语言支持两种基本的浮点类型:float和double。java的浮点类型都依据IEEE754标准。IEEE754定义了32位和64位双精度两种浮点二进制小数标准。

IEEE754用科学记数法以底数为2的小数来表示浮点数。32位浮点数用1位表示数字的符号,用8位来表示指数,用23位来表示尾数,即小数部分。作为有符号整数的指数可以有正负之分。小数部分用二进制(底数2)小数来表示。对于64位双精度浮点数,用1位表示数字的符号,用11位表示指数,52位表示尾数。如下两个图来表示:


float(32位):

绿色部分是符号位,红色部分是幂指数,蓝色部分是尾数。

对比可以得出:符号位都是0,幂指数为移码表示,两者刚好也相等。唯一不同的是尾数。

在double的尾数为:,省略后面的零,至少需要24位才能正确表示。

而在float下面尾数为:00110001011001111001100,共23位。

为什么会这样?原因很明显,因为float尾数最多只能表示23位,所以24位的001100010110011110010111在float下面经过四舍五入变成了23位的00110001011001111001100。所以20014999在float下面变成了20015000。

也就森禅是说20014999虽然是在float的表示范围之内,但在IEEE754的float表示法精度长度没有办法表示出20014999,而只能通过四舍五入得到一个近似值。

总结:

浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用float和double作精确运算的时候要特别小心。

可以考虑采用一些替代方案来实现。如通过String结合BigDecimal或者通过使用long类型来转换。

4. java中float和double的取值范围是什么

1、float:4字节(32bit),IEEE 754。取值范围:

[-3.40282346638528860e+38 , -1.40129846432481707e-45] ∪ [1.40129846432481707e-45 ~ 3.40282346638528860e+38] 。

2、毁芹double: 8字节(64bit) ,IEEE 754。取值范围:

[-1.79769313486231570e+308,-4.94065645841246544e-324] ∪ [4.94065645841246544e-324,1.79769313486231570e+308] 。

(4)javafloat和double扩展阅读:

float和double的范围精度

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。纤携毕

float:2^23 = 8388608,共七位,意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

double:2^52 = 4503599627370496,一共16位,同理,隐汪double的精度为15~16位。

5. 在java中double型和float常量有什么区别啊

1.
我感觉你可能更想问的问题是:java中敏轿double和float类型有和区别?建议修改问题,把【常量】二字去掉;
2.
这两种数据类型的主要区别是:double取值范围和精度比float都要高;
3.
java中,次要区别是二者在变量定义上有些不同,比如:floath
a
=
2.3f;
double
a
=
2.3;float类型值后面有一贺卖个f;
4.
在很多环境下(java/C#.....)他们桥拍肆的区别大约都是以上这些。

6. java double和float的区别

一、float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占 用4个字节的存储空间
二、double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到10的308次 方,double占用8个字节的存储空间
三、当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其 后加上f
例如:float a=1.3f;如果写作:float a=1.3;
则会提示不能将double转化成float 这成为窄型转化
如果要用float来修饰的话,则应该使用float a=1.3f
四、注意float是8位有效数字,第7位数字将会产生四舍五入
所以如果一个float变量 这样定义: float a=1.32344435f; 则第7位将产生四舍五入(5及5 以下的都将舍去)
五、转载至http://www.360doc.com/content/17/0501/18/42534750_650101155.shtml

7. java中float和double的取值范围是什么

float:4字节(32bit),IEEE 754. 取值范围:

[-3.40282346638528860e+38 , -1.40129846432481707e-45] ∪ [1.40129846432481707e-45 ~ 3.40282346638528860e+38] 。

double: 8字节(64bit) ,IEEE 754. 取值范老咐围:

[-1.79769313486231570e+308,-4.94065645841246544e-324] ∪ [4.94065645841246544e-324,1.79769313486231570e+308] 。

(7)javafloat和double扩展阅读

基本数据类型的特点,位数,最大值和最小值。

1、

基本类型:short 二进制位数:16

包装类:java.lang.Short

最小值:Short.MIN_VALUE=-32768 (-2的15此方)

最大值:Short.MAX_VALUE=32767 (2的15次方-1)

2、

基本类型:int 二进制位数:32

包装类:java.lang.Integer

最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)

最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)

3、

基本类型:long 二进制位数:64

包装类:java.lang.Long

最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)

最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)

4、

基本类型:float 二进制位数:32

包装雀含旦类:java.lang.Float

最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)

最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)

5、

基本类型:double 二进制位数:64

包装类:java.lang.Double

最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)

最大值:Double.MAX_VALUE=1.7976931348623157E308 (顷扰2的1024次方-1)

8. java 中float 和double有什么区别,对于赋值来说,求解。谢谢!

  1. float为单精度浮点类型,占4个字节,能表示的数范围小;double为双精度浮点类型,占8个字节,能表示的数范围大。

  2. 对于赋值来说,因为声明浮点数时默认为double类型,所以float需要在数的的后面添加f/F;

    例:

    float a=1.2 //错误

    float a=1.2f //正确

    float a=1.2F //正确

    double b=1.2 //正确

    double b=1.2d //正确

    double b=1.2D //正确

9. java中float和double的区别

float表示单精度浮点数在机内占4个字节,用32位二进制描述。
double表示双精度浮点数在机内占8个字节,用64位二进制描述。
浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占1位二进制,表示数的正负。
指数符占1位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
指数存指数的有效数字。
指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占24位,指数符加指数占8位 -- float.
数符加尾数占48位,指数符加指数占16位 -- double.
知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是浮点数的数值范围。
编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

10. java float和double的区别

单精度浮点数(float)与双精度浮点数(double)的区别如下:
(1)在内存中占有的字节数不同
单精度浮点数在机内占4个字节
双精度浮点数在机内占8个字节
(2)有效数字位数不同
单精度浮点数有效数字8位
双精度浮点数有效数字16位
(3)所能表示数的范围不同
单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38
双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308
(4)在程序中处理速度不同一般来帆茄说,CPU处理单精度浮态裤察点数的纯氏速度比处理双精度浮点数快

阅读全文

与javafloat和double相关的资料

热点内容
考研人如何缓解压力 浏览:818
买电暖壶哪个app便宜 浏览:503
洛克王国忘记服务器了怎么办 浏览:782
为什么cf登录服务器没反应 浏览:695
服务器如何获取文件列表 浏览:672
creo五轴编程光盘 浏览:14
苹果app网络验证在哪里 浏览:14
博科清空命令 浏览:384
简爱英文pdf 浏览:376
cnc编程有前途吗 浏览:586
联想app怎么联网 浏览:722
linuxftp命令登录 浏览:1000
android获取图片缩略图 浏览:646
神户制钢螺杆压缩机 浏览:29
差分演化算法 浏览:567
中山市加密软件 浏览:446
mc反编译源码 浏览:141
企业商城网站源码 浏览:411
shell脚本编程是什么 浏览:762
单片机led闪烁汇编 浏览:203