无法将值存储在变量中

时间:2018-12-05 06:53:31

标签: c# asp.net

我想从数据库中找到两个值的百分比。 当我执行计算时,变量未存储结果。有人请告诉我为什么会这样。

private int GetPercentage(int re, int al)
{
    float k;
    if (al > 0)
    {
        k  = (float) (re / al) * 100;
    }
    else
    {
        k = 100;
    }
    if (k < 10)
    {
        float p = 100 - k;
        Label3.Visible = true;
        Label3.Text = "Customer has used more than " + p + "% of Allotted LPOs";
    }
    int l = 100 - (int)k;
    return l;
}

2 个答案:

答案 0 :(得分:1)

再一次让您对整数语义感到困惑。从数学上我们知道1/3是0.33333333 ...但是,编程也不适用,在编程中,将一个整数(分别是1和3)与另一个 allways 分开的结果是另一个整数,从而浮点数与另一个始终相乘的结果为float

因此以下内容返回零:

1 / 3

因此,您必须告诉编译器您要的 floating-point (算术浮点数)算法,可以通过将运算符之一转换为float或使用float-literal来实现。以下表达式返回正确的浮点数:

1f / 3

或者,您也可以写1.0 / 31 / 3f1 / 3.0

所以您在代码中需要的是:

private int GetPercentage(int re, int al)
{
    float k;
    if (al > 0)
    {
        k  = ((float) re / al) * 100; // see here, you need to cast to float
    }
    else
    {
        k = 100;
    }
    if (k < 10)
    {
        float p = 100 - k;
        Label3.Visible = true;
        Label3.Text = "Customer has used more than " + p + "% of Allotted LPOs";
    }
    int l = 100 - (int)k;
    return l;
}

答案 1 :(得分:0)

您可以在GetPercentage方法中声明变量k和l。因此,它们在其他地方不可用。 如果这样,您可以执行第二步:

if (k < 10)
{
    Label3.Visible = true;
    Label3.Text = "Customer has used more than " + p + "% of Allotted LPOs";
    return (float)100 - k;
}