C# 如何获得C中的折扣百分比#
假设dis.text=2,prc.text=100,我正在使用这些代码 net_prc.text=98。但它给了我-100。有人能告诉我为什么吗?我怎样才能得到正确答案 折扣率C# 如何获得C中的折扣百分比#,c#,percentage,C#,Percentage,假设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
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();
}
您的除法,
d/100
,是整数的除法,它返回一个整数,可能是0
(零)。您的示例d=2肯定就是这种情况
<强>加法:< /强>如果你真的想用整数来做这件事(不要改为<代码>十进制< /代码>或<代码>双< /代码>,像许多其他答案一样推荐),请考虑改变子表达式
((d / 100) * i)
进入
因为它会给你一个更好的精度做除法作为最后的操作。对于示例中的数字,d=2
和i=100
,第一个子表达式将给出0*100
或0
,而更改后的子表达式将产生200/100
,即2
。但是,您将无法舍入到最接近的整数;相反,您将得到截断(分数部分被丢弃,无论它是否接近1
)。di=-((d/100)*i)+i代码>
此语句中的所有值都是整数。您将使用小数位数计算算术,并且您需要将变量的精度提高到双精度或浮点。相反,在方程式中的一个值上添加一个小数位。这将强制所有值为双精度
这是一个过程,称为。在运行时,方程中每个变量的精度都会增加到最精确变量的大小。正确的方法是,将di
的数据类型更改为float
di = (d * 100) / i;
C#有一种奇怪的数学方法,因为你的数字被转换成整数,你只能用它们来做整数数学。您首先需要将它们设置为浮点或双精度,这样您就可以进行浮点运算或任何需要小数点的运算。尝试(d/100.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();
}
我现在不想思考。你能告诉我dis.Text和prc.Text的值是多少吗?假设dis.Text=2,prc.Text=100
@MikeC.Convert int to decimal。。。它会工作的……是的,它给我100或0。那么我该怎么做呢???@MuhammadAzeemKhan在你的一个值上加一个小数点,并将di的类型改为双精度。@ChrisCooney好的,我知道了。问题解决了,谢谢。但是现在如果我输入dis.text=1.5,它给我的错误是“输入字符串的格式不正确”.那是因为你在分析Int32。Int32值没有小数点。@ChrisCooney那么现在该怎么办?如果d
和i
仍然是整数,那么上面的除法仍然是整数除法。以后是否将其分配(因此转换)到浮点值
,这并不重要。
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();
}