カスタムグループ/桁区切り記号と小数点区切り文字を使用してC#で文字列に数値を書式化したいとします。グループと小数点記号はユーザー入力に基づいて変更できるので、ハードコードされた書式設定文字列の代わりにNumberFormatInfoオブジェクトを使用したいと思います。私のコードは適切な区切り文字を取得しますが、数値の精度を常に小数点以下2桁に変更しますが、必要に応じて小数点以下を表示したいので整数値は小数点以下を持ちません。 。精度を変更せずにカスタムグループと小数点区切り文字でフォーマットする数値
どうすればこの問題を解決できますか?私は "N"パラメータを変更する必要があると推測していますが、それを何に変更しますか?
double n1 = 1234;
double n2 = 1234.5;
double n3 = 1234567.89;
double n4 = 1234.567;
var nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
nfi.NumberGroupSeparator = " ";
string s1 = n1.ToString("N", nfi); //want "1 234" but I get "1 234,00"
string s2 = n2.ToString("N", nfi); //want "1 234,5" but I get "1 234,50"
string s3 = n3.ToString("N", nfi); //correct output of "1 234 567,89"
string s4 = n4.ToString("N", nfi); //want " 1 234,567" but I get "1 234,57"
あなたは私の解決策を 'Replace'と' Trim'または 'LINQ'を使って試しましたか?組み込みのソリューションを探す場合、これらはすべて組み込まれています... – Ian
"### ### ###。###"をパラメータとして指定すると、ソリューションは多くの状況で失敗します。数値の小数点以下の桁数に依存しますNumberFormatInfoオブジェクトの小数点区切り記号とグループ区切り記号にも依存します。たとえば、倍数の値が0.1234になると失敗します私の解決策は常にdoubleと任意のNumberFormatInfoオブジェクトで動作します – tjsmith
私は... LINQの使用を検討するかもしれません。 'LINQ'ソリューションは、あなたが言及している他のソリューションを扱うことができるはずです。 – Ian