1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java中将int转换float_在java中将float和double转换为int时有什么区别?

java中将int转换float_在java中将float和double转换为int时有什么区别?

时间:2021-11-01 00:11:41

相关推荐

java中将int转换float_在java中将float和double转换为int时有什么区别?

我用这些语句来测试

float f=4.35f;

int i=(int)(f*100);

System.out.println(i);

double d=4.35;

i=(int)(d*100);

System.out.println(i);

结果是

435

434

我曾经认为float和double之间的唯一区别就在于精度.它们在计算中应该相同.但我将4.35转换为二进制,然后将其转换回十进制,发现它实际上是4.3499999 ……

因此,如果我将它乘以100然后再进行投射,我认为答案应该是434,浮动和双重.为什么第一个是435?

解决方法:

Java中的浮点使用二进制表示.许多具有十进制精确表示的数字,例如4.35,在任何精度上都不具有二进制的精确表示(无论是浮点数,双精度数还是其他精度).

当您在Java程序中编写4.35时,它被解释为意味着最接近的435/100.当你写4.35f时,它被解释为最接近435/100的浮点数.

碰巧4.35和4.35f都略低于435/100:

在Java中,4.35表示4.3499999999999996447286321199499070644378662109375,4.35f表示4.349999904632568359375.

在第一个近似中,两种类型中最接近的可表示值低于目标435/100的可能性很大(尽管在深入研究它时,没有任何随机性).

另一方面,数字435可以表示为浮点数和双精度数.

当将4.35f或4.35乘以100(这可以精确地表示为float和double也是如此)时,会发生以下两种可能性之一:

>乘法的数学结果比任何其他浮点数更接近435.然后选择435作为操作的结果.你必须记住,Java并不知道它正在乘以4.35的数字.据他所知,你故意选择低于4.35的数字.也许你真的打算将操作数设置为4.349999904632568359375.这是乘法过程中第二次近似的结果,最终结果是435.无论如何,将浮点数435转换为int会产生int 435.这就是浮点数时发生的情况.

>乘法的数学结果最接近435以下的浮点数.在这种情况下,选择浮点数作为浮点乘法的结果.将此结果转换为int会产生434,因为从浮点到整数的转换通过截断来实现.这是双重情况下发生的情况.乘以4.3499999999999996447286321199499070644378662109375乘以产生的数学结果接近于紧接在435.0以下的双精度(此双精度为434.99999999999994315658113919198513031005859375),因此该双精度值用作浮点乘法的结果.

标签:java

来源: https://codeday.me/bug/0528/1173713.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。