3

好奇为什么

double progress = 5/10;

表明我的变量progress= 0.0 当它应该等于 0.5 时,对吗?

明确定义progress

double progress = 0.5;

工作正常,但我需要在数学上不明确地定义它。也许我缺少一个库或其他东西,或者我的大脑。可见工作室 2012 Win 7 x64。

4

3 回答 3

14

因为你正在做整数除法。试试5.0/10.0吧。(或5.0/105/10.0- 至少有一个操作数是double.)

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

当您将小数点添加到文字数字时,它被解释为double. 在 adouble和 an之间进行除法时intint将转换为 adouble并使用“常规”除法。

请注意,这会给(double)(5/10)double 0-not 。这是出于与上述相同的原因:常量表达式整数除法的解释不受该表达式外部的任何上下文的影响。 double 0.55/10

于 2013-06-17T17:35:26.547 回答
3

您将两个int-s 相除,因此结果是int最终分配给double. 由于 anint不能代表分数,所以它被四舍五入。该操作是整数除法,因为所有项都是整数。

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

于 2013-06-17T17:35:45.463 回答
3

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

double progress = 5.0 / 10.0;
于 2013-06-17T17:36:15.683 回答