除以Random.next总是得到0?

Rya*_* S. 0 c# random division

这个让我很困惑.我正在编写一个带有一些随机变化的损伤算法.当我计算变化时,这就是它的样子.

Random random = new Random();
Double variation = random.Next(85, 115) / 100;
Double damage = restOfAlgorithm * variation;
Run Code Online (Sandbox Code Playgroud)

当我这样做时,变化总是输出0.但是,如果我喜欢下面,它将输出预期的结果.

Random random = new Random();
Double variation = random.Next(85, 115);
Double damage = restOfAlgorithm * (variation / 100);
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

jlt*_*rem 5

除以双倍:

Double variation = random.Next(85, 115) / 100.0;
Run Code Online (Sandbox Code Playgroud)

要么

Double variation = random.Next(85, 115) / (double)100;
Run Code Online (Sandbox Code Playgroud)

否则你将进行整数运算(因为Random.Next返回一个整数,100也是整数).

我认为最好的做法是了解您正在使用的类型,并将所有类型转换为所需的类型.当然,这不仅是必要的,因为编译器将隐式转换值.但是通过明确的演员表,你的意图随后会被看到代码的人看到.

Double variation = (double)random.Next(85, 115) / 100d;
Run Code Online (Sandbox Code Playgroud)