2012-11-27 46 views
1
float percentrelation = Individualrelatonshipdegree/relationshipdegree * 100; 

这个简单的操作返回0,而在Individualrelationshipdegree变量中的值是19,并在relationshipdegree是35,但它仍然返回0。不明白这个问题。任何帮助将不胜感激。运算工作不

+1

请注意,这与ASP.NET标记已删除无关。请只使用对您的问题真正有意义的标签。 –

回答

4

你正在做整数除法。尝试

float percentrelation = 
    1.0f * Individualrelatonshipdegree/relationshipdegree * 100; 
+0

这是什么1.0f? – user1575229

+0

我希望我有一个€新的编码器,我看到了这个绊脚石,并寻求帮助... :-) – PhiLho

+0

@ user1698985由于表达式从左到右评估'1.0f * Individualrelatonshipdegree'将是一个浮点数,所有结果将被转换为浮动 –

3

这两个变量是整数吗?如果是的话,你可能想要先演员。

float percentrelation = (float) Individualrelatonshipdegree/(float) relationshipdegree * 100; 

此外,请注意浮动不是很精确。考虑使用十进制isntead。

+1

仅仅投射其中一个就足够了。 – Rotem

+0

是的。对于OP,float/int仍然是float,并且类似地,decimal/int将是小数。 – ryadavilli

4

只要看看计算顺序。你想div的19 35.所以这是0,然后乘以0和100这也为0。
所以,你可以尝试通过类型转换使得第一可变浮动的,该表达式:

float percentrelation = (float)Individualrelatonshipdegree/relationshipdegree * 100; 

UPD需要解释类型转换时刻。计算顺序是从左到右。并且我们有一个规则,在运行时使用整数(int,byte,long long等)和float(float,double等)操作数,它们都被类型转换为float类型。这就是为什么我们只需要在第一个操作数上进行一次类型转换。这就是为什么1.0f * your expression的另一个答案也能正常工作。只是两种不同的方式。

+0

......很好的解释。从来没有这样想过。谢谢 – user1575229