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