解析字符串以浮点数C#

我在字符串中有浮点数。 有一个问题。 数字使用“。” 不是“,”作为小数点。

此代码无效:

MyNumber = float.Parse("123.5"); 

我知道我可以使用字符串替换function在解析之前“修复”此字符串。

 MyNumber = float.Parse("123.5".Replace('.',','); 

但还有其他办法吗?

要添加史蒂文的问题,而不是争论不同,重要的是小数分隔符的原因.

如果是因为源是计算机可读格式,其中句点小数分隔符被指定为文档规范的一部分,那么我就像Steven在使用CultureInfo.InvariantCulture

如果它是特定语言环境中的人工输入,那么您希望通过适合该语言环境的CultureInfo匹配该语言环境,否则如果该软件与不同的语言环境一起使用,则恰恰存在相反的问题。 通常,您可能希望将线程的CurrentCulture设置为与此匹配( CurrentCulture表示格式, CurrentUICulture表示语言)。 如果你已经这样做了,那么你根本不需要传递一种文化,因为表单float.Parse(string)使用了这种文化 – 但是,你可能希望使用float.Parse(string, CurrentCulture)来明确指出这就是你正在做的事情(并且当你不以这种方式具体时,会关闭一些抱怨的软件分析)。

真正棘手的是,如果你可能不得不同时接受句点和逗号 – 尤其是因为许多文化使用句点作为小数分隔符,使用逗号作为千位分隔符,最终不可能保certificate确的解析。 但是,假设成千上万的问题对您没有影响,那么您在问题中提供的代码就是方法,尽管我建议采用相反的方法(用句点替换逗号),然后使用不变文化进行解析,因为这会删除任何由更多文化变革引起的进一步复杂化。

使用字符串替换是非常脆弱的,并将导致suttle错误。 请改为指定IFormatProvider 。 例如:

 MyNumber = float.Parse("123.5", CultureInfo.InvariantCulture); 

或者,您可以使用另一个Parse重载来指定NumberFormatInfo

它取决于当前执行的线程文化的当前文化。

 float.Parse("123,5", system.threading.thread.currentthread.currentculture); float.Parse("123.5", system.threading.thread.currentthread.currentculture); 

如果你严格不想要特定的文化

 float.Parse("123.5", CultureInfo.InvariantCulture);