C#将任何格式字符串转换为双精度

C#将任何格式字符串转换为双精度,c#,string,format,double,type-conversion,C#,String,Format,Double,Type Conversion,我尝试搜索google和stackoverflow,但没有成功 “输入字符串的格式不正确”是我遇到的一个问题。我正在使用的一个应用程序例外 问题是,我将一些双精度值转换为具有doubleNumber.ToString(“N2”)的字符串;以便将它们存储在XML文件中。当我切换测试机器时,存储在一台机器上的XML文件不能返回双值 我已经尝试了我能想到的所有解决方案,但是设置数字区域性不起作用,使用CultureInfo.InvariantCulture,替换字符也不起作用。有时这些值存储为“300

我尝试搜索google和stackoverflow,但没有成功

“输入字符串的格式不正确”是我遇到的一个问题。我正在使用的一个应用程序例外

问题是,我将一些双精度值转换为具有doubleNumber.ToString(“N2”)的字符串;以便将它们存储在XML文件中。当我切换测试机器时,存储在一台机器上的XML文件不能返回双值

我已经尝试了我能想到的所有解决方案,但是设置数字区域性不起作用,使用CultureInfo.InvariantCulture,替换字符也不起作用。有时这些值存储为“3001435.57”,有时(在其他PC上)存储为“3.001.435,57”

无论输入格式是什么,是否有某种函数或方法可以解析double-from字符串


谢谢。

您必须指定区域性,因为(例如)“3001”不明确-是3.001还是3001


根据数字的不同,您可以尝试通过计算
字符的数量和/或检查它们的位置来检测区域性

这是你要找的


这将接受字符串变量和格式提供程序。您需要创建一个格式提供程序,提供要转换的区域性信息。

您一定是在什么地方把不变量区域性的使用搞砸了。它应该适用于任何具有一致的数字分隔符和小数点的PC。@jv42正如我在另一篇评论中所说的,它可以保存在一个区域性中,也可以在另一个区域性中读取,因此该区域性在可以使用该应用的PC上是不一致的。我一定误解了某些部分。如果您正在创建文件,可以指定保存时的区域性(不变)与加载时的区域性相同(不变),这样就不会因机器而异。@jv42将尝试重新检查我的代码,以查看我是否在某些地方缺少对区域性的使用。Convert.toDouble给了我一些不好的结果,所以我可能在某个地方严重地替换了它。类似的东西就是我正在搜索的。。。计算字符数是行不通的,因为每个字符只能有一个。唯一有效的方法是检查小数点分隔符的位置,但这也可能很棘手,因为数字可以在小数点后更长或更短(例如301.108)。使用TryParse作为培养基如何,如果失败,请转到下一个常用培养基,冲洗并重复?@Martheen,这可能有效,我想有人可能会有一个更简单的解决方案。解决文化问题,然后一直尝试,直到有一种文化可行,这听起来不是一个优雅的解决方案。问题是我不知道文化,因为应用程序可以在多种文化中使用。所以我需要从字符串中检测区域性的方法,而不是从它运行的系统中检测。(数字可以以一种区域性格式保存,并在另一种区域性中读取)您可以从Environment static类获取区域性。