好奇为什么
double progress = 5/10;
显示我的变量progress
= 0.0,当它应该等于0.5,对吗?
将progress
明确定义为
double progress = 0.5;
正常工作,但我需要在数学上不明确地定义它。也许我错过了一个lib或者什么,或者我的大脑。 Vis Studio 2012 Win 7 x64。
答案 0 :(得分:14)
因为你正在进行整数除法。请尝试使用5.0/10.0
。 (或5.0/10
或5/10.0
- 至少有一个操作数为double
。)
编译器不使用=
符号左侧的内容来确定右侧常量表达式的值。它将5
作为整数和10
作为整数插入,因此/
作为整数除法< / em>的
将小数点添加到文字编号时,会将其解释为double
。在double
和int
之间进行分割时,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;