尽管s
和d
包含完全相同的数值,但为它们显示不同的数字,因为用于Single
和Double
转换为文本的位数不同。
Console.WriteLine(s)
调用Console.WriteLine(Single)
which 生成s
using Single.ToString
which 使用格式说明符“G”进行转换的文本表示,此处记录。同样,Console.Writeline(d)
调用Double.ToString
.
根据文档,使用的最大位数是 7Single
和 15 Double
。我没有看到指定实际使用的位数的文档,只是最大值。
该语句Dim s As Single = 1.15
设置s
为值 1.14999997615814208984375,因为这是Single
最接近 1.15 的值。(第二个最接近的是 1.150000095367431640625。)当您将该值四舍五入到七位十进制数字时,结果是“1.150000”。我认为 .NET 会省略尾随零,产生“1.15”。
当d
设置为相同的值并打印时,使用 15 位。当 1.14999997615814208984375 舍入为 15 位时,结果为“1.14999997615814”。
Single
因此,将 a转换为时没有错误Double
。这只是一种展示的错觉。
请注意,Double
转换为时通常会出现错误Single
。如果你写了Dim d As Double = 1.15
,那么d
将被设置为 1.149999999999999911182158029987476766109466552734375,我预计Console.WriteLine(d)
会产生“1.15”。转换d
为Single
将产生 1.14999997615814208984375。