这种方法返回的是什么?

时间:2013-10-07 19:45:37

标签: java parameters int return

“(int)”在以下return语句中实际执行了什么操作?

public double calc(double amount){
    return (int)(amount * 100)/100;
}

我原以为这个方法会返回相同的值,因为我乘以100然后再除以100。 。 。当我在编译器中测试错误时,让我恢复到原始值。对于实例:

    carInformation myCar = new carInformation("");
    System.out.println(myCar.calc(34.86432456789));

我明白了:

34.0

为什么会这样?

4 个答案:

答案 0 :(得分:1)

在乘法之后,转换为int会截断小数点以外的任何内容,因此 3486.432456789变为3486,除以100以获得34。这太过分了;不需要乘法或除法,只需:(int) amount。然后返回值为double,因此会隐式转换回double34.0

答案 1 :(得分:0)

因为它会转换为int,因此会将值34.86...截断为34。整数不存储小数位,因此它只会截取小数点右边的任何内容。

但是,由于您返回double,您的方法会转换您的值并添加额外的小数位:34.0

答案 2 :(得分:0)

这称为Narrowing Primitive Conversion。转换按照描述

完成
  

在第一步中,浮点数转换为a   long,如果T很长,或者是int,如果T是byte,short,char或int,   如下:

     

否则,如果浮点数不是无穷大,则   浮点值四舍五入为整数值V,向四舍五入   零使用IEEE 754舍入零模式(§4.2.3)。然后有   两种情况:

     

如果T很长,这个整数值可以表示为long,   那么第一步的结果就是长值V。

     

否则,如果此整数值可以表示为int,那么   第一步的结果是int值V。

所以

的价值
(amount * 100)

属于double类型,由于演员而被转换为int。然后除以100。由于您的方法被声明为返回double,因此结果为widened,从intdouble,具有以下规则:

  

[...]生成的浮点值将被正确舍入   使用IEEE 754舍入到最接近模式

的整数值的版本

答案 3 :(得分:0)

  • (int)将分子转换为int。所以,你将有3486。
  • /100执行整数除法。你将有34岁。

要实现您的目标,请执行浮点除法:

return (int)(amount * 100.0) / 100.0;