Java 为什么我必须发表这一声明才能得到结果?

Java 为什么我必须发表这一声明才能得到结果?,java,android,casting,Java,Android,Casting,谢谢。如果Java中的算术运算的操作数都是ints,则会产生ints,因此实际上是将整数结果赋给双变量。因此,必须将其中至少一个转换为double,以便基于double执行计算,因为精度更高。Java中的算术运算,其操作数均为ints,将导致ints,因此实际上是将整数结果赋给双变量。因此,必须将其中至少一个转换为double,以便基于double执行计算,因为精度更高。将整数除以整数定义为进行整数除法,就像在大多数(所有?)其他类似C语言中一样 通过将score转换为double,可以将浮点值

谢谢。

如果Java中的算术运算的操作数都是
int
s,则会产生
int
s,因此实际上是将整数结果赋给双变量。因此,必须将其中至少一个转换为double,以便基于double执行计算,因为精度更高。

Java中的算术运算,其操作数均为
int
s,将导致
int
s,因此实际上是将整数结果赋给双变量。因此,必须将其中至少一个转换为double,以便基于double执行计算,因为精度更高。

将整数除以整数定义为进行整数除法,就像在大多数(所有?)其他类似C语言中一样


通过将
score
转换为double,可以将浮点值除以整数,然后返回浮点值。

将整数除以整数定义为整数除法,就像大多数(所有?)其他类似C语言一样


通过将
score
转换为双精度,可以将浮点值除以整数,然后得到一个浮点值。

L2\u MAX\u score-L1\u MAX\u score
=150-30=120

让我们假设分数是30

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

你也可以

  • a) 将分子或分母转换为双精度
  • b) 重新安排 公式为
    (分数*100)/(L2\u MAX\u分数-L1\u MAX\u分数)
    • 这样,它将变成(30*100)/120=3000/120=40
    • 它仍然进行整数除法,因此如果分数为31,则您的答案为3100 /120)不是25.8333而是25

    • L2最大分数-L1最大分数
      =150-30=120

      让我们假设分数是30

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

      你也可以

      • a) 将分子或分母转换为双精度
      • b) 重新安排 公式为
        (分数*100)/(L2\u MAX\u分数-L1\u MAX\u分数)
        • 这样,它将变成(30*100)/120=3000/120=40
        • 它仍然进行整数除法,因此如果分数为31,则您的答案为3100 /120)不是25.8333而是25

      我觉得奇怪的是,将变量(progress)定义为double并不会自动启动此行为。Java首先计算右侧的表达式,然后再将其分配给变量,所以我相信在考虑数据类型时,如果不进行强制转换,结果已经是int了。为什么double的类型会影响计算?将int存储为double是有效的,将int除以并期望int是有效的。所以
      双进度=3/4;progress==0
      是一个完全合法的语句。如果它自动将3/4设置为浮点除法,您将如何更改语法以便可以执行它现在所做的操作?我发现奇怪的是,将变量(progress)定义为double并不会自动启动此行为。Java首先计算右侧的表达式,然后再将其分配给变量,所以我相信在考虑数据类型时,如果不进行强制转换,结果已经是int了。为什么double的类型会影响计算?将int存储为double是有效的,将int除以并期望int是有效的。所以
      双进度=3/4;progress==0
      是一个完全合法的语句。如果它自动将3/4设置为浮点除法,您将如何更改语法以使您可以执行它现在所做的操作?即使答案为>1,double对象仍会填充0而不进行强制转换。您对分数使用的值是什么
      UpdateLevel(110)
      的结果应为0.0;虽然
      UpdateLevel(120)
      将是100.0,即使答案是>1,double对象仍然会填充0而不进行强制转换。您对分数使用什么值
      UpdateLevel(110)
      的结果应为0.0;而
      UpdateLevel(120)
      将为100.0
      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;