2011-06-06 99 views
2

我试图搜索谷歌和stackoverflow没有成功。C#将任何格式字符串转换为双倍

我遇到了“输入字符串格式不正确”的问题。例外与我正在工作的应用程序。

事情是,我将一些double值转换为doubleNumber.ToString(“N2”)的字符串;以便将它们存储在XML文件中。当我切换测试机器时,存储在其中的XML文件无法返回到double值。

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

无论输入格式是什么,是否存在某种函数或从字符串中解析double的方法?

谢谢。

+0

你一定已经搞乱了你对InvariantCulture的使用。它应该可以在任何PC上使用一致的数字分隔符和小数位数。 – jv42 2011-06-06 11:55:56

+0

@ jv42正如我在另一条评论中所说的,它可以保存在一种文化中,并在另一种文化中阅读,所以文化与个人电脑的应用程序可以使用的地方不一致。 – Clone 2011-06-06 12:05:29

+0

我一定误解了一些部分。如果你正在创建这些文件,你可以在*保存*(不变)时指定文化在* loading *(不变)时相同,所以它不会因机器不同而不同。 – jv42 2011-06-06 12:17:48

回答

3

您必须指定一种文化,因为(例如)“3,001”不明确 - 它是3.001还是3001?

根据你的数字是什么样子,也许你可以尝试通过计算,.字符的数量和/或检查它们的位置来检测文化。

+0

类似的东西就是我正在寻找的......计算字符数不会起作用,因为数字只能有一个。 唯一可行的是检查小数点分隔符的位置,但这也可能比较棘手,因为小数点后面的数字可能更长或更短(如301.108)。 – Clone 2011-06-06 11:59:59

+0

如何使用TryParse进行培养,如果失败,继续进行下一个共同的培养,冲洗并重复? – Martheen 2011-06-06 12:08:15

+0

@Martheen这可能有用,我认为有人可能有一个更简单的解决方案。制定文化,并尝试,直到一个作品听起来不是一个优雅的解决方案。 – Clone 2011-06-06 12:20:05

0

这里是你在找什么...

http://msdn.microsoft.com/en-us/library/9s9ak971.aspx

这将接受一个字符串变量和格式提供。您需要创建一个格式提供程序,以提供您希望转换的文化信息。

+0

问题是我不知道文化,因为应用程序可以用在多种文化中。所以我需要从字符串中检测文化,而不是从它运行的系统中检测文化。 (数字可以保存为一种文化格式,并在另一种文化中阅读) – Clone 2011-06-06 12:03:42

+0

您将从环境静态类中获得文化。 – bdparrish 2011-06-09 16:44:47