我一直在处理面试问题1.5个小时,但在我的Java程序中找不到错误.然后我发现问题是什么,我不明白(不注意价值观,还有其他人,这是关于类型):
int size=100;
Integer a=12;
if(a >= size/10)...
//didn't work
Run Code Online (Sandbox Code Playgroud)
不同于
if(a >= size*0.1)...
//worked
Run Code Online (Sandbox Code Playgroud)
我知道有一个转换,但是,如果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.
另一方面,浮点数不是全部.float并且double不能表示每个整数,并在计算后舍入.
对于给定的数值size但是,它将导致的效果,因为100是的倍数10和一个float或double能够表示的范围从零到百任何整数值的.
最后/10并不总是整数除法:如果第一个操作数是浮点(例如14.0d/10),编译器会将其转换为浮点除法.
精简版:
int/int是一个整数除法,向下舍入到最接近的(较低)整数.int*double是一个双乘法 - 用四舍五入的错误 - 得到浮点值,最接近正确的结果(带十进制数字).| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |