比较从字符串转换的两个浮点数

时间:2019-05-20 05:32:26

标签: c# asp.net

比较从字符串转换的两个浮点数时,我遇到问题。 当我将数字与两位小数(例如30,25)进行比较时,我没有任何问题,但是当数字只有一位(30,6)时,结果不好。

例如,30,6 > 30,25的结果是false(我没想到)。

       if (gvr.RowType == DataControlRowType.DataRow)
        {
            double CyklusSAP = 0;
            double CyklusReal = 0;
            bool prevod = false;
            CyklusSAP = double.Parse(gvr.Cells[10].Text, System.Globalization.CultureInfo.InvariantCulture);
            prevod = double.TryParse(gvr.Cells[11].Text,out CyklusReal);

            if (prevod)
            {
                CyklusReal = double.Parse(gvr.Cells[11].Text, System.Globalization.CultureInfo.InvariantCulture);

                if (CyklusReal < CyklusSAP - 1)
                {
                    gvr.Cells[11].BackColor = System.Drawing.Color.LightBlue;
                }
                if (CyklusReal > CyklusSAP - 1 && CyklusReal < CyklusSAP)
                {
                    gvr.Cells[11].BackColor = System.Drawing.Color.LightGreen;
                }
                if (CyklusReal > CyklusSAP && CyklusReal < CyklusSAP + 1)
                {
                    gvr.Cells[11].BackColor = System.Drawing.Color.LightYellow;
                }
                if (CyklusReal > CyklusSAP + 1)
                {
                    gvr.Cells[11].BackColor = System.Drawing.Color.Red;
                }
            }
        }

Picture

当第二行比第一行大时,第二行是红色。

2 个答案:

答案 0 :(得分:4)

您正在使用不变文化。在不变文化中,,是千位分隔符,而不是十进制分隔符。因此,您的数字分别为3063 025。您需要使用正确的区域性来解析数字。

答案 1 :(得分:2)

您需要使用正确的区域性将逗号分隔的小数点转换为浮点数

类似

NumberStyles style = NumberStyles.AllowDecimalPoint;
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR");
if(double.TryParse(gvr.Cells[10].Text, style, culture, out CyklusSAP) && double.TryParse(gvr.Cells[10].Text, style, culture, out prevod))
{  
  // Your logic goes here
}

奖金:别忘了写using System.Globalization;

POC:.net fiddle