sとにはまったく同じ数値が含まれていますが、とテキストへの変換にd使用される桁数が異なるため、異なる数字が表示されます。SingleDouble
Console.WriteLine(s)ここに記載されているフォーマット指定子「G」を使用して変換する usingのConsole.WriteLine(Single)テキスト表現を生成する呼び出し。同様に、 を呼び出します。sSingle.ToStringConsole.Writeline(d)Double.ToString
ドキュメントによると、使用される最大桁数は の場合は 7 桁、 の場合はSingle15 桁ですDouble。実際に使用される桁数を指定しているドキュメントはありません。最大値のみです。
このステートメントは、 1.15 に最も近い値である 1.14999997615814208984375 にDim s As Single = 1.15設定します。(2 番目に近いのは 1.150000095367431640625 です。)その値を 7 桁に丸めると、結果は「1.150000」になります。私は、.NET が末尾のゼロを省略して「1.15」を生成していると推測します。sSingle
d同じ値に設定して印刷すると、15 桁が使用されます。1.14999997615814208984375 を 15 桁に四捨五入すると、結果は「1.14999997615814」になります。
したがって、 aSingleを に変換してもエラーは発生しませんDouble。これは単なる表示の錯覚です。
Doubleを に変換すると、一般にエラーが発生することに注意してくださいSingle。と書いたDim d As Double = 1.15場合、d1.149999999999999911182158029987476766109466552734375 に設定され、Console.WriteLine(d)「1.15」が生成されると予想されます。に変換dするSingleと、1.14999997615814208984375 が生成されます。