为什么打印(70 *(50/100))返回0?

时间:2017-07-02 19:28:08

标签: c# unity3d

为什么它会返回0?

print(70 * (50 / 100));

70 * 0,5 = 35

我不知道为什么会这样。或者我犯了一些愚蠢的错误......我不知道

4 个答案:

答案 0 :(得分:5)

50/100整数之间的区分。自50<100起,结果为0,因此70*(50/100)会产生0。

如果你想避免这种情况,你必须将其中一个投射为double

70 * (50 / (double)100)

70 * ((double) 50/ 100)

答案 1 :(得分:2)

分割两个整数时,结果始终为整数。例如,7 / 3 is 2

的结果

所以在50/100 is equal to 0.35并且因为你正在潜水两个整数,它将忽略小数位,所以它将是零 - 0,所以计算机将其视为:(忽略.35)

70 * 0 = 0

P.S

也许你可以稍微探讨一下调用Decimal.Divide,你的int参数会被隐式转换为Decimals,所以.35不会被忽略。

您还可以通过将至少一个参数显式地转换为浮点类型来强制对int参数进行非整数除法,例如:

int a = 42;
int b = 23;
double result = (double)a / b;

它是怎么来的......:)

答案 2 :(得分:1)

因为/会输出int而非double值。结果应该是0.5,0将被视为int,然后它将乘以70,结果将为0.

你需要按如下方式进行演员表:

double x = 50/(double)100 ;

然后:

print(70 * x);

答案 3 :(得分:-3)

50 / 100070 * 00