0

假设 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();
    }
4

6 回答 6

1

di = -((d / 100) * i) + i;

此语句中的所有值都是整数。您将要计算带小数位的算术,并且需要将变量的精度提高到双精度或浮点数。而是在等式中的某个值中添加一个小数位。这将强制所有值变为双精度值。

这是一个称为算术提升的过程。它是在运行时将方程中每个变量的精度增加到最精确变量的大小的地方。

于 2013-03-03T19:16:08.890 回答
1

尝试 (d / 100.0) 强制它使用浮点运算

于 2013-03-03T19:17:11.633 回答
0

正确的方法是,将数据类型更改difloat

di = (d * 100) / i;
于 2013-03-03T19:16:13.510 回答
0

C# 有一种奇怪的数学运算方式,因为你的数字被转换为整数,你只能用它们做整数数学。您最初需要将它们设置为浮点数或双精度数,以便您可以进行浮点数学运算或任何需要计算中小数位的事情。

于 2013-03-03T19:16:20.517 回答
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();
    }
于 2013-03-03T20:29:17.880 回答
-1

d / 100的除法 是整数的除法,它返回一个整数,可能是0(零)。您的示例肯定是这种情况d = 2

加法:如果你真的想用整数来做这个(而不是改变decimaldouble像许多其他答案推荐的那样),考虑改变子表达式

((d / 100) * i)

进入

((d * i) / 100)

因为将除法作为最后一次操作会给您带来更好的精度。使用您的示例的数字d=2and i=100,第一个子表达式将给出0*100or 0,而更改后的子表达式200/100将产生 which 2。但是,您不会四舍五入到最接近的整数;相反,您将被截断(小数部分被丢弃,无论它是否接近1)。

于 2013-03-03T19:16:05.757 回答