为什么5/10 = 0.0?

时间:2013-06-17 17:34:11

标签: c# double

好奇为什么

double progress = 5/10;

显示我的变量progress = 0.0,当它应该等于0.5,对吗?

progress明确定义为

double progress = 0.5;

正常工作,但我需要在数学上不明确地定义它。也许我错过了一个lib或者什么,或者我的大脑。 Vis Studio 2012 Win 7 x64。

3 个答案:

答案 0 :(得分:14)

因为你正在进行整数除法。请尝试使用5.0/10.0。 (或5.0/105/10.0 - 至少有一个操作数为double。)

编译器不使用=符号左侧的内容来确定右侧常量表达式的值。它将5作为整数10作为整数插入,因此/作为整数除法< / em>的

将小数点添加到文字编号时,会将其解释为double。在doubleint之间进行分割时,int将转换为double,并且将使用“常规”分区。

请注意,(double)(5/10)会为您提供double 0 - double 0.5 。这与上述原因相同:常量表达式整数除法5/10被解释为没有该表达式外部的任何上下文。

答案 1 :(得分:3)

您要划分两个int - s,结果是int最终分配给double。由于int不能表示分数,因此它会向下舍入。该操作是整数除法,因为所有项都是整数。

如果你5.0 / 10.0,你会得到正确的结果。

答案 2 :(得分:3)

表达式5/10是一个整数表达式,因此使用整数数学。将一个或两个操作数定义为double以获得双数学:

double progress = 5.0 / 10.0;