简单的计算器总是返回0

时间:2014-01-17 15:01:46

标签: c#

在我的C#应用​​程序中,我想实现一个简单的计算。我得到了这段代码:

private void button1_Click(object sender, EventArgs e)
{
    int percentField;
    int priceField;
    int result;

    percentField = int.Parse(txtPercentNew.Text);
    priceField = int.Parse(txtPriceNew.Text);

    result = priceField / 100 * percentField;

    MessageBox.Show(result.ToString());
}

但问题是MessageBox显示我0。我无法弄清楚为什么。 有人可以给我一个提示我做错了吗?

6 个答案:

答案 0 :(得分:8)

您的变量是整数,这意味着/执行integer division。除非priceField至少等于100,否则结果总是为0。

您可以通过在分割前将priceField强制转换为浮点类型来解决问题:

(double)priceField / 100 * percentField;

但是,result类型为int时,这不起作用,因为编译器希望保护您免受无意的舍入错误。所以你要么必须转回一个整数(由于四舍五入而失去精度):

result = (int)((double)priceField / 100 * percentField);

或者让result成为double

答案 1 :(得分:1)

您使用的是整数而不是浮点数。 因此,在计算过程中会发生四舍五入。

使用floatdouble代替int

答案 2 :(得分:1)

可能您的priceField小于100,并且由于您执行整数除法,因此会创建0

来自/ Operator (C# Reference)

  

分割两个整数时,结果始终为整数。 For   例如,7/3的结果是2.确定剩下的7 /   3,使用余数运算符(%)。获得商作为理性   数字或分数,给予被除数或除数类型float或type   双。如果表达被除数,您可以隐式指定类型   通过在数字的右侧放置一个数字或将除数作为小数   小数点,如下例所示。

只需将您的一个变量转换为浮点类型,如;

result = priceField / 100d * percentField;

result = (double)priceField / 100 * percentField;

答案 3 :(得分:0)

您只使用整数,请尝试

double result;    
result = priceField / (double)100 * percentField;

在你的代码中,你除以100.这意味着你将要除以小于100的每个int将导致[0 - 1]之间的值。当隐式转换为int时,结果将被覆盖。因此,0.1将变为0 - 0.9将变为0 - ...

答案 4 :(得分:0)

尝试转换为double,因为你正在处理整数,结果为0。

示例here

答案 5 :(得分:0)

问题是你正在为每个值使用int

将结果更改为double并尝试此操作:

result = (double)priceField / 100 * percentField;

它应该工作;但是,如果您想要正确地执行此操作,我建议您阅读MidpointRounding