此代碼:Console.Out.WriteLine(string.Format(CultureInfo.GetCultureInfo("hu-HU"), "{0:C}", 1234.56M))
將產生以下輸出:1 234,56英尺,這在技術上是正確的,但它是如何猜測貨幣?爲什麼.NET貨幣格式包含貨幣符號?
這種行爲意味着只要將顯示文化從hu-HU改變爲en-US,就會將值乘以200以上,這取決於當前的費率。您絕不會犯500美元的500福林。明顯。
設定貨幣克隆所需的文化和設置的貨幣符號的唯一的「好」辦法:
var format = NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo("en-US")).Clone() as NumberFormatInfo;
format.CurrencySymbol = "asd";
Console.Out.WriteLine(string.Format(format, "{0:C}", 1234.56M));
這工作正確的生產asd1,234.56
,但這麼多繁瑣。
我的問題是:
- 什麼是落後於這個全球化的世界,我們一直生活在幾十年默認爲一個國家貨幣的比例是多少?
- 爲什麼沒有辦法以更相關的方式指定金額和貨幣,因爲它們如此耦合?
- 獎勵:如果我使用sk-SK進行文化交流,我會獲得「默認」貨幣的歐元。如果我更改爲Framework 2.0,自2005年以來它應該是
Sk
(對於斯洛伐克克朗),它是本國貨幣。 (當然,這不會發生,但我還沒有嘗試過有不遲於2.0的任何系統上。)
UPDATE: 結論:
- 從文化違約貨幣是一切正常對於其他人(包括我)
- 沒有「金額」類型,因爲沒有長度,重量等類型,限額在哪裏? Virtlink爲此創建了一個庫:M42 Financial
它顯示它,因爲你問它。如果你不需要,只需使用另一種格式說明符。像「N2」一樣。 – 2013-03-04 14:27:40
您正在混淆數據的格式。如果您以錯誤的匯率或錯誤的貨幣進行匯票,而這不是格式問題。 – Paparazzi 2013-03-04 14:32:17
雖然這是根據計算器規則的「非建設性」問題之一,但這是一個非常有趣的問題。 – 2013-03-04 14:34:34