C# - Int操作莫名其妙地返回负值

Rad*_*Hex 3 c# floating-point int

操作如下:

public float InfectionPercent()
{
    return (infected + zombies) * 100 / population;
}
Run Code Online (Sandbox Code Playgroud)

价值观是:

int infected = 20196093
int zombies = 1978138
int population = 32608521
Run Code Online (Sandbox Code Playgroud)

返回的值是 -63

改变100100f修复此.


为什么这个操作返回-63而不是63

Pie*_*ult 8

20196093 + 1978138 = 22174231
22174231 * 100 = 2 217 423 100
Run Code Online (Sandbox Code Playgroud)

但是,Int.MaxValue是2 147 483 647,所以你破坏了最大值.

通过设置100float强制浮点乘法.有效值float介于-3.4 × 10^38和之间+3.4 × 10^38(这是340十亿分之一,即相当多),所以它确实是正确的.