浮动与双在java中有什么区别

  

与双浮动在java中有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

浮动是单精度类型,精度是8位有效数字,取值范围是-38次的方到10的38次方,浮动占用4个字节的存储空间

双是双精度类型,精度是17位有效数字,取值范围是-308次的方到10的308次方,双占用8个字节的存储空间

当你不声明的时候,默认小数都用双来表示,所以如果要用浮动的话,则应该在其后加上f

例如:浮动=1.3;

则会提示不能将双转化成float 这成为窄型转化

如果要用浮来修饰的话,则应该使用浮点数=1.3 f

注意浮动是8位有效数字,第7位数字将会产生四舍五入

所以如果一个浮动变量这样定义:,浮动=1.32344435,,,则第7位将产生四舍五入(5个及5个以下的都将舍去),,

<强> 1。两个在定义时的区别

1)浮动型内存分配4个字节,占32位,范围从-38到10 ^ ^到38和-10 ^ -10 ^ -38

例浮动x=123.456 f, y=2 e20f;注意浮型定义的数据末尾必须有“f"或“f"为了和双区别

(2)双型内存分配8个字节,范围从10 ^ -308到10 ^ 308和-10 ^ -308到-10 ^ -308

,例双x=1234567.98, y=8980.09 d;末尾可以有“d"也可以不写,,,,,,

<强>,2。特别需要注意的是两个浮点数的算术运算

直接使用+,-,*,%运算符的问题

, public  class 测试{   ,,,,,,,public  static  void 主要(String  args []) {   ,,,,,,,System.out.println (0.05 + 0.01);   ,,,,,,,System.out.println (1.0 - -0.42);   ,,,,,,,System.out.println (4.015 * 100);   ,,,,,,,System.out.println (123.3/100);   ,,,,,,,}   ,,,}

结果:

0.060000000000000005 401.49999999999994 0.5800000000000001


1.2329999999999999原因:

首先得从计算机本身去讨论这个问题。我们知道,计算机并不能识别除了二进制数据以外的任何数据,无论我们使用何种编程语言,在何种编译环境下工作,都要先,把源程序翻译成二进制的机器码后才能被计算机识别。以上面提到的情况为例,我们源程序里的2.4是十进制的,计算机不能直接识别,要先编译成二进制。但问题来了,2.4的二进制表示并非是精确的2.4,反而最为接近的二进制表示是2.3999999999999999。原因在于浮点数由两部分组成:指数和尾数,这点如果知道怎样进行浮点数的二进制与十进制转换,应该是不难理解的。如果在这个转换的过程中,浮点数参与了计算,那么转换的过程就会变得不可预知,并且变得不可逆。我们有理由相信,就是在这个过程中,发生了精度的丢失。而至于为什么有些浮点计算会得到准确的结果,应该也是碰巧那个计算的二进制与十进制之间能够准确转换。而当输出单个浮点型数据的时候,可以正确输出,如

double  d =, 2.4;   System.out.println (d);

输出的是2.4,而不是2.3999999999999999。也就是说,不进行浮点计算的时候,在十进制里浮点数能正确显示。这更印证了我以上的想法,即如果浮点数参与了计算,那么浮点数二进制与十进制间的转换过程就会变得不可预知,并且变得不可逆。

事实上,浮点数并不适合用于精确计算,而适合进行科学计算。这里有一个小知识:既然浮点数和双精度数型用来表示带有小数点的数,那为什么我们不称它们为“小”数或者“实”数,要叫浮点数呢?因为这些数都以科学计数法的形式存储。当一个数如50.534,转换成科学计数法的形式为5.053 e1,它的小数点移动到了一个新的位置(即浮动了)。可见,浮点数本来就是用于科学计算的,用来进行精确计算实在太不合适了。

看完上述内容,你们掌握浮动与双在java中有什么区别的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

浮动与双在java中有什么区别