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

问题描述 投票:0回答:7

假设 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();
    }
c# percentage
7个回答
1
投票

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


1
投票

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

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

这个过程称为“算术提升”。在运行时,方程中每个变量的精度都会增加到最精确变量的大小。


0
投票
di

的数据类型更改为

float

di = (d * 100) / i;



0
投票


0
投票

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



0
投票
discountedPrice= currentPrice * 0.95;

    


-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
,小数部分都会被丢弃)。
    

© www.soinside.com 2019 - 2024. All rights reserved.