と言ったら何になるの?
System.Console.WriteLine("{0:R}", 0.1+0.2);
のようなフォーマット文字列"F40"
は、文字列の末尾にゼロを追加するだけです。ただの と比較して、追加の精度は得られません"G"
。一方、は、 からの文字列に近い数値とその数値を区別するために必要な場合 (およびその場合のみ)"R"
に、2 桁の余分な数字 (または 2 桁の余分な数字の最後の桁が の場合は 1 桁) を明らかにします。0
"G"
追加:フォーマット文字列が .NET でどのように機能するかをよりよく理解するには、次のコードを実行してみてください。
double a = BitConverter.ToDouble(new byte[] { 49, 51, 51, 51, 51, 51, 211, 63, }, 0);
double b = BitConverter.ToDouble(new byte[] { 50, 51, 51, 51, 51, 51, 211, 63, }, 0);
double c = BitConverter.ToDouble(new byte[] { 51, 51, 51, 51, 51, 51, 211, 63, }, 0);
double d = BitConverter.ToDouble(new byte[] { 52, 51, 51, 51, 51, 51, 211, 63, }, 0);
double e = BitConverter.ToDouble(new byte[] { 53, 51, 51, 51, 51, 51, 211, 63, }, 0);
Console.WriteLine("using G:");
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.WriteLine(c.ToString());
Console.WriteLine(d.ToString());
Console.WriteLine(e.ToString());
Console.WriteLine("using F40:");
Console.WriteLine(a.ToString("F40"));
Console.WriteLine(b.ToString("F40"));
Console.WriteLine(c.ToString("F40"));
Console.WriteLine(d.ToString("F40"));
Console.WriteLine(e.ToString("F40"));
Console.WriteLine("using R:");
Console.WriteLine(a.ToString("R"));
Console.WriteLine(b.ToString("R"));
Console.WriteLine(c.ToString("R"));
Console.WriteLine(d.ToString("R"));
Console.WriteLine(e.ToString("R"));
ここでa
、b
、c
、d
、およびは、バイト配列から明らかな se
としての「隣人」です。、、、およびの場合にのみ、フォーマット文字列が余分な数字を与えるSystem.Double
ことがわかるはずです。の場合、余分な数字は必要ありませんが、17 の数字で書く場合、17 の最後の 2 つはそうではないことは明らかです(メソッドが .NET に組み込んだ完全な 10 進展開については、Jon Skeet の回答も参照してください)。簡単にはくれません)。"R"
a
b
d
e
c
c
00