假设dis.text = 2,prc.text = 100,我正在使用这些代码。应该是 net_prc.text = 98.但它给我-100。任何人都可以告诉我为什么?,我怎样才能正确 折扣百分比??
private void net_prcTabChanged(object sender, EventArgs e)
{
int d;
int di;
int i;
d = Convert.ToInt32(dis.Text);
i = Convert.ToInt32(prc.Text);
di = -((d / 100) * i) + i;
net_prc.Text = di.ToString();
}
答案 0 :(得分:1)
di = -((d / 100) * i) + i;
此语句中的所有值均为整数。您将使用小数位计算算术,并且需要将变量的精度提高到double或float。而是将小数位添加到等式中的一个值。这将强制所有值成为双倍。
这是一个名为Arithmetic Promotion的过程。在运行时,方程中每个变量的精度都会增加到最精确变量的大小。
答案 1 :(得分:1)
尝试(d / 100.0)强制它使用浮点运算
答案 2 :(得分:0)
正确的方法是将di
的数据类型更改为float
di = (d * 100) / i;
答案 3 :(得分:0)
C#有一种奇怪的数学运算方式,因为你的数字是整数,你只能用它们进行整数运算。你需要最初将它们设置为float或double,这样你就可以进行浮动数学或任何需要在计算中需要小数位的东西。
答案 4 :(得分:0)
甚至dis.text = 1.5
private void net_prcTabChanged(object sender, EventArgs e)
{
double d;
double di;
double i;
d = Convert.ToDouble(dis.Text);
i = Convert.ToDouble(prc.Text);
di = -((d * 100.0) / i ) + i;
net_prc.Text = di.ToString();
}
答案 5 :(得分:-1)
你的分区d / 100
是整数的一个分区,它返回一个整数,可能是0
(零)。您的示例d = 2
确实如此。
添加:如果你真的想用整数做这个(而不是像许多其他答案一样改为decimal
或double
),请考虑更改子表达式
((d / 100) * i)
到
((d * i) / 100)
因为它会为你提供更好的精度来进行最后一次操作。使用您的示例d=2
和i=100
的数字,第一个子表达式将提供0*100
或0
,而更改的子表达式将产生200/100
这将是2
。但是,你不会四舍五入到最接近的整数;相反,你将得到截断(小数部分被丢弃,无论它是否接近1
)。