次の簡単なプログラムをデバッグして、各ステップでx
にマウスを移動してください(またはx
などの「時計の追加」)。Visual Studioはデバッグ中にSystem.Doubleをどのように表示しますか?
using System;
using System.Globalization;
static class Program
{
static double x;
static void Main()
{
x = 2d;
// now debugger shows "2.0", as if it has used
// x.ToString("F1", CultureInfo.InvariantCulture)
x = 8.0/7.0;
// now debugger shows "1.1428571428571428", as if it had used
// x.ToString("R", CultureInfo.InvariantCulture)
// Note that 17 significant figures are shown, not the usual 15.
x = -1e-200/1e200;
// now debugger shows "0.0"; there is no indication that this is really negative zero
//
Console.WriteLine(1.0/x); // this is negative infinity
}
}
したがって、明らかにVSにはSystem.Double
を表示する独自の方法があります。この目的のためにどの方法を呼びますか?私は非常に同じ文字列表現をプログラムで得ることができる方法はありますか?
は(Visual Studioの2010 Professionalでこれを試してみた。)
非常に有益な答えです。しかし、実際に私の** ** ** _ecvt_s'がどのように呼び出されるのかは分かりません。そして私は 'ToString'メソッドも最終的に' _ecvt_s'を呼び出すことによって動作すると考えていますか?また、文字列に ".0"部分を追加するのはおそらくクリーンアップコードと呼ばれるもので行われるので、 'extern'メソッドを通して' _ecvt_s'を呼び出すだけでは、単独では動作しません。だから、おそらく答えは簡単です:いいえ、私はプログラム的に同じ文字列を取得することはできません? –
@JeppeStigNielsenは、_ecvt_sがどのように呼び出されるかをあなたが何を意味するのかよく分かりません。あなたは詳しく説明できますか?まったく同じ文字列を取得する場合は、正確なクリーンアップコードがない限り、複製することは困難です。 – JaredPar
'_ecvt_s'の出力がどのように' _SizeInBytes'や '_Count'のようなパラメータに依存するのかよくわかりません。しかし、VSで示される文字列は、常に小数点の右側に少なくとも1桁の数字が含まれているように見えますが、それ以外の文字は0になりません。彼らが「なぜ」をする理由。0 "のことは確かに' Int32'ではなく 'Double'であることをより明確にしています。 –