C#计算错误

时间:2018-11-04 17:44:14

标签: c#

我有一个计算(304/1000)* 100的c#代码,它等于30.4,但是当我每次在C#中运行代码时,每次得到0时。

decimal width = (maxSize.Width/ maxValue) * value; //304, 1000, 100 respectively
Console.WriteLine(width); //Returns 0

我不明白到底是怎么回事?

3 个答案:

答案 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作为结果。

解决方案:

使操作数为decimalfloatdouble。 (对于每种类型,分别为100m100f100d

这三种类型都支持小数,因此,如果使用小数,将得到正确的结果30.4

或者,或者您可以将括号中的值之一乘以上述三种类型中的任何一种的1.0

(1.0f * 304 / 1000) * 100