Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得C中的折扣百分比#_C#_Percentage - Fatal编程技术网

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

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

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

您的除法,
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();
    }