2011-06-06 81 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