在我的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
。我无法弄清楚为什么。
有人可以给我一个提示我做错了吗?
答案 0 :(得分:8)
您的变量是整数,这意味着/
执行integer division。除非priceField
至少等于100,否则结果总是为0。
您可以通过在分割前将priceField
强制转换为浮点类型来解决问题:
(double)priceField / 100 * percentField;
但是,result
类型为int
时,这不起作用,因为编译器希望保护您免受无意的舍入错误。所以你要么必须转回一个整数(由于四舍五入而失去精度):
result = (int)((double)priceField / 100 * percentField);
或者让result
成为double
。
答案 1 :(得分:1)
您使用的是整数而不是浮点数。 因此,在计算过程中会发生四舍五入。
使用float
或double
代替int
。
答案 2 :(得分:1)
可能您的priceField
小于100
,并且由于您执行整数除法,因此会创建0
。
分割两个整数时,结果始终为整数。 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。