【问题标题】:Convert Float that has period instead of comma?转换有句点而不是逗号的浮点数?
【发布时间】:2008-12-12 01:13:32
【问题描述】:

我有来自数据库(字符串)中包含文本和价格的表的数据。我从数据中提取价格,但我的问题是有时我可以将其转换为浮动,有时不能。

我注意到了:

Convert.ToSingle(m.Groups[1].Value);

它有效,但并非总是如此,因为有时句号是问题(它需要逗号)。我能做些什么?我尝试用“,”替换“.”,但有时在其他 PC 上这是一个需要的时间段!

【问题讨论】:

    标签: c# .net .net-2.0


    【解决方案1】:

    你有这个问题,因为转换检查你的电脑的语言。您需要执行以下操作:

    Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture.NumberFormat);
    

    这样,它不会检查 PC 的语言。您可以从 MSDN 找到有关 InvariantCulture 的更多信息。我在一个项目中有类似的东西,我的转换工作。

    【讨论】:

    • 你比我快17秒!您实际上不需要 NumberFormat 属性,因为 CultureInfo 已经实现了 IFormatProvider。
    • :P 自从我参加 SO 以来,我的打字增加了;)
    【解决方案2】:

    或者明确要求这种特定的数字格式:

    System.Globalization.NumberFormatInfo nf
      = new System.Globalization.NumberFormatInfo ( )
    {
      NumberGroupSeparator = "."
    };
    float f = float.Parse ( "5.34534", nf );
    

    【讨论】:

      【解决方案3】:

      如果您没有数据库的写入权限,首先要做的是尝试说服数据来源使用不变文化。如果用户正在输入数据,您可以执行以下操作:

      float f = float.Parse(input);
      string toDb = f.ToString(CultureInfo.InvariantCulture);
      

      然后从另一边:

      float f = float.Parse(fromDb, CultureInfo.InvariantCulture);
      string toOutput = f.ToString();
      

      不过,如果你能说服他们相信,正如 Lette 所说,说服他们使用本机数据类型可能会更好。

      从上面的 sn-ps 中可以看出,出于各种原因,我还建议使用 float.Parse 而不是 Convert,但最重要的是能够使用 TryParse:

      float f;
      if (!float.TryParse(input, out f))
      {
          // ERROR
      }
      

      【讨论】:

        【解决方案4】:

        正如其他人所说:

        Convert.ToSingle(m.Groups[1].Value, CultureInfo.InvariantCulture);
        

        您还必须确保在写入 到数据库时使用InvariantCulture。 (如果您将数据保存到具有其本机数据类型的列中会更好,但我离题了...)

        【讨论】:

        • 只是重申已经说过的话不会让你获得更多的代表。
        • @leppie,我想我实际上增加了一些价值。而且,没有得到任何支持也不会让我获得任何代表。
        • 我同意在 NumberFormat 要求的解释中添加了值
        • 我没有数据库的写权限。
        • @Mister Dev:在存储和序列化时使用 InvariantCulture 的建议仍然有效。 (正如@ICR 所说...)
        猜你喜欢
        • 1970-01-01
        • 2015-07-20
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多