gpt4 book ai didi

java - java中number/10和number*0.1的区别

转载 作者:行者123 更新时间:2023-12-01 17:00:49 24 4
gpt4 key购买 nike

我已经花了 1.5 个小时来解决面试问题,但在我的 Java 程序中找不到错误。然后我发现问题是什么,我不明白(不要注意值,还有其他问题,这是关于类型的):

int size=100;
Integer a=12;
if(a >= size/10)...
//didn't work

不同
if(a >= size*0.1)...
//worked

我知道存在转换,但是,a=12 时,if(a>=size/10) 怎么可能返回 false?

这是为什么?

最佳答案

/10整数除法。而*0.1首先将第一个操作数转换为 double并执行浮点乘法

如果您使用/10 ,操作数为14 ,这将导致 1确实,14/10=1.4但整数除法会向下舍入此值。因此29/10=2 .

如果您使用*0.1 ,Java编译器首先会转换size的值为 double ,因此 14.0然后将其乘以 0.1导致 1.4 .

另一方面,浮点并不都是美妙的。 floatdouble不能代表所有整数,计算后四舍五入。

对于 size 的给定值但是,它会产生这样的效果,因为 10010 的倍数和一个 floatdouble能够表示从零到百范围内的任何整数值。

最后/10并不总是整数除法:如果第一个操作数是浮点(例如 14.0d/10 ),编译器会将其转换为浮点除法

简短版本:

  • int/int是一个整数除法,向下舍入到最接近的(较低)整数。
  • int*double是一个双倍乘法,它 - 带有舍入误差 - 产生最接近正确结果(带十进制数字)的浮点值。

关于java - java中number/10和number*0.1的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com