如何在C#中获得折扣百分比

时间:2013-03-03 19:12:39

标签: 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 = Convert.ToInt32(prc.Text);
        di = -((d / 100) * i) + i;
        net_prc.Text = di.ToString();
    }

6 个答案:

答案 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确实如此。

添加:如果你真的想用整数做这个(而不是像许多其他答案一样改为decimaldouble),请考虑更改子表达式

((d / 100) * i)

((d * i) / 100)

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