2016-12-30 9 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")); 

を更新し

私はすでに使用可能ですが、この方法で間違っているものを得ることができない多くのフォーマット関連のソリューションがあることを知っています。

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

そして、あなたのような関数を呼び出す:

+0

設定したCI詳細を使用していないようです...使用してみましたか? – BugFinder

+0

新しいカルチャーをどこにも使用していないため、スレッドの現在のカルチャを最初に設定する必要があります。あなたが作成した文化をどのように使用するのか –

+0

@DirtyDeveloperはい、サンプルコードの作成時に間違いました。アップデートをチェックしても同じ問題は確認できます。 – JDoshi

答えて

2

。 また、書式指定子が正しくありません。常にPOINTを書式文字列の小数点区切り記号として使用する必要があります。書式文字列は、カルチャ固有の小数点記号(fr-FRのカンマ)に置き換えられます。

次は正常に動作する必要があります

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

'.'で動作しますが、どのように'、 'で同じことを達成できますか?私はそれが '、'小数点のセパレータ 'として可能だと思いますが、私は気づいていません:( – JDoshi

+0

適用する必要のあるフォーマットはユーザ入力から受け取ります。通常、'、 'で小数点 – JDoshi

+0

@JDoshi残念なことに、書式指定子は文化に依存しないように設計されています。エンドユーザーの文化について確信が持てるならば、単純な "コンマの点をポイントに置き換えてください – Mr47

0

あなたは、この機能を使用することができますが、番号をフォーマットするために作成したカルチャ情報を使用していない

decimal integral = Convert.ToDecimal("12345"); 
Console.WriteLine(integral.FormatNumber()); 
関連する問題