2016-12-30 59 views
1

我需要將格式應用於decimal類型的數字。假設12345必須以## ##0,0的格式顯示。然後,所需的輸出是12 345,0。但不知何故,它不適用,我得到的結果爲1 2,345格式不適用於法國文化

以下是執行格式化工作的代碼。同時檢查這個fiddle我的問題被複制。

修訂

CultureInfo ci = new CultureInfo("fr-FR"); 
decimal integral = Convert.ToDecimal("12345"); 
Console.WriteLine(integral.ToString("## ##0,0")); 

我知道已經有可用,但無法得到什麼不對的方式很多格式相關的解決方案。

+0

你似乎沒有使用任何你設置的ci細節......你有嘗試過使用它嗎? – BugFinder

+0

您必須首先在線程上設置當前文化,因爲您並未在任何地方使用新文化。 c#將如何知道如何使用您創建的文化。 –

+0

@DirtyDeveloper是的,這是我在創建示例代碼時犯的錯誤。可以檢查更新並仍然是相同的問題。 – JDoshi

回答

2

您沒有使用創建的文化信息格式化數字。 另外,您的格式說明符不正確。您必須始終使用POINT作爲格式字符串中的小數點分隔符,然後將其替換爲文化特定的小數點分隔符(fr-FR的逗號)。

下應能正常工作:這裏

integral.ToString("## ##0.0", ci) 
+0

用'.'確實有效,但是我怎麼才能用'''來實現。我認爲''''可以用'decimal separator',但我不知道如何: – JDoshi

+0

需要應用的格式是從用戶輸入接收的,通常它應該與''一起工作,因此它應該可以和Excel一起工作 – JDoshi

+0

@JDoshi不幸的是,格式說明符是獨立於設計文化的,如果你確信最終用戶的文化,你可以執行一個簡單的「用逗號替換「 – Mr47

0

您可以使用此功能:

public static string FormatNumber(this double number) 
     { 
      return number.ToString("#,##0.00"); 
     } 

然後調用你的函數,如:

decimal integral = Convert.ToDecimal("12345"); 
Console.WriteLine(integral.FormatNumber());