2

コードを C++ から C# にアップグレードしており、多くの場所で文字列をフォーマットしています。たとえば、次のようなものがあります。

OurString.Format("amount = %0.2Lf", (long double)amount);

%0.2Lf を C# 形式に変換する方法は? 次のコードを試しましたが、同じではありません

string formatString = String.Format("amount = {0}", (long double)amount));

どうも

4

2 に答える 2

3

Tieson が書いたようにF2... C では、デフォルトのロケールは C ロケールであることを覚えておいてください。たとえば0.00、C# ではデフォルトのロケールはユーザーの現在のロケール (ここではイタリア0,00) です。したがって、次のようにすることをお勧めします。

string formatString = String.Format(CultureInfo.InvariantLocale, 
                                    "amount = {0:F2}", amount);

常にどこでも同じ方法で数字をフォーマットしたい場合。私が「ここイタリア」と言ったとき、「米国でイタリア語の Windows 8 を使用する場合、既定のロケールはイタリア語になる」という意味もあることに注意してください。

ああ...そしてlong doubleC#(または.NET、またはその理由でVC ++の新しいバージョン)には s がありません。Sのみdouble

お金にa double(または a )を使用することは、それ自体がアンチパターンであることを追加します...それにはdecimal型があります。long double

Decimal 値型は、正の 79,228,162,514,264,337,593,543,950,335 から負の 79,228,162,514,264,337,593,543,950,335 までの範囲の 10 進数を表します。Decimal 値タイプは、多数の有効な整数桁と小数桁を必要とし、丸め誤差がない財務計算に適しています。Decimal 型では、丸めが不要になるわけではありません。むしろ、丸めによるエラーを最小限に抑えます。たとえば、次のコードは、1 ではなく 0.9999999999999999999999999999 という結果を生成します。

于 2013-08-15T06:21:58.697 に答える