我有一个计算(304/1000)* 100的c#代码,它等于30.4,但是当我每次在C#中运行代码时,每次得到0时。
decimal width = (maxSize.Width/ maxValue) * value; //304, 1000, 100 respectively
Console.WriteLine(width); //Returns 0
我不明白到底是怎么回事?
答案 0 :(得分:1)
您的输入变量均为int类型。在执行计算之前,将它们中的任何一个都转换为十进制或后缀带字母M的数字,以转换为十进制。
答案 1 :(得分:1)
使用正确的类型
maxSize.Width = 304m;
maxValue = 1000m;
value=100m;
decimal width = (maxSize.Width/ maxValue) * value;
答案 2 :(得分:1)
好像您在使用int
s作为操作数。
使用int
除法时,您必须记住结果的小数部分被 截断 。
即,对于(304/1000)*100
行(为简单起见,将变量替换为其值),将计算以下内容:
304
除以1000
,得到0.304
。然后,小数点将被截断,因为这是整数除法,导致0
是最终结果。
然后,将0
乘以100
,得到0
作为结果。
解决方案:
使操作数为decimal
,float
或double
。 (对于每种类型,分别为100m
,100f
和100d
这三种类型都支持小数,因此,如果使用小数,将得到正确的结果30.4
。
或者,或者您可以将括号中的值之一乘以上述三种类型中的任何一种的1.0
:
(1.0f * 304 / 1000) * 100