代码之家  ›  专栏  ›  技术社区  ›  ElectricRay81

从字符串到双精度的转换效果不好

  •  0
  • ElectricRay81  · 技术社区  · 2 年前

    我正在尝试将字符串转换为双精度。我有像“000.2”或“000.7”这样的值。我试着用它们做图表。但是当我使用 y = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value);

    dataGridView的实际值为“000.7”,输出为7°????

    我不理解这一点。

            int rows = dataGridView1.RowCount;
            int x;
            double y;
    
            for (int i = 0; i < rows; i++)
            {
                x = Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value);
                y = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value);
                this.chartHorizontal.Series["Horizontal"].Points.AddXY(x, y);
            }
    

    也许有人知道这里出了什么问题?

    建议的线程并没有告诉我出了什么问题。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Donut    2 年前

    Convert.ToDouble 电话 Double.Parse(string s, IFormatProvider provider) 内部具有 CultureInfo.CurrentCulture 作为 provider 参数(参见 here ).

    很可能 文化信息。当前文化 导致“000.7”被解释为“7”-例如,通过 new CultureInfo("de") 作为第二个参数 转换ToDouble公司 为我产生了与您看到的相同的结果。

    要想避开这个问题,试着传球 CultureInfo.InvariantCulture 明确地:

    y = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value, CultureInfo.InvariantCulture);
    

    根据文件:

    与文化敏感数据不同,文化敏感数据可能会因用户自定义或对的更新而更改。NET Framework或操作系统中,固定区域性数据随着时间的推移和安装的区域性之间是稳定的,用户无法自定义。这使得不变区域性对于需要与区域性无关的结果的操作特别有用,例如保留格式化数据的格式化和解析操作,或者要求数据以固定顺序显示而不考虑区域性的排序和排序操作。