代码之家  ›  专栏  ›  技术社区  ›  user432209

为什么我必须强制执行此语句才能获得结果?

  •  0
  • user432209  · 技术社区  · 15 年前
    private final static int L1_MAX_SCORE = 30;
    private final static int L2_MAX_SCORE = 150;
    
    public void UpdateLevel(int score) {
       double progress;
    
       //returns 0.0
       progress = score / (L2_MAX_SCORE  - L1_MAX_SCORE) * 100;   
    
       //works correctly.
       progress = (double) score / (L2_MAX_SCORE  - L1_MAX_SCORE) * 100;  
    

    谢谢。

    3 回复  |  直到 15 年前
        1
  •  1
  •   BoltClock    15 年前

    Java中的算术运算,其操作数均为 int S将导致 int 所以你要给一个双变量分配一个整数结果。因此,必须将它们中的至少一个强制转换为double,以便基于double执行计算,因为具有更高的精度。

        2
  •  2
  •   Michael Madsen    15 年前

    用整数除整数被定义为做整数除法,就像大多数(全部)一样。其他C语言。

    通过铸造 score 对于double,将浮点值除以整数,然后返回浮点值。

        3
  •  0
  •   Alok    15 年前

    L2_MAX_SCORE - L1_MAX_SCORE =150-30=120

    假设得分是30分

    使用浮点,答案应该是30/120=0.4。 对于整数除法,这将被四舍五入为0,因此它“不起作用”——它实际上起作用,但根据您的需要进行了错误的除法

    你也可以

    • a)将分子或分母转换为双精度
    • b)重排 公式 (score * 100) / (L2_MAX_SCORE - L1_MAX_SCORE)
      • 有了这个,它将变成(30*100)/120=3000/120=40
      • 它仍然做整数除法,所以如果分数是31,你的答案(3100 /120)不是25.8333,而是25