将 Single 值转换为 Double 值时遇到问题。
BitStream 提供的单曲是简单的 2 到 6 位小数,在许多情况下,简单到 0.4、0.94、0.6 等(我应该注意,我收到的文档指出它们是浮点数(Java 中),来自我的理解与.NET 中的 Single 相同。
我最终需要将这些值作为双精度值,因为它们将用作 Point3D 对象(X、Y 和 Z)的坐标,并最终用于其他需要双精度值的应用程序的 API。
但是,当我使用 CDbl(valueAsSingle) 或 Ctype(valueAsSingle, Double) 执行转换时,该数字在 Double 中添加了额外的小数位,在第 9 位和更晚的小数位。这会导致最终需要使用这些值的应用程序出现问题。
首先,我很好奇为什么会这样?其次,如果我只是将 Single 转换为 String,然后执行 Double.TryParse(valueAsString),可能会出现问题
作为参考,这里有一个非常简单的例子。
Sub Main()
Dim SingleX As Single = 0.4
Dim SingleY As Single = 0.94
Dim SingleZ As Single = 0.6
Console.WriteLine(String.Concat("SX: ", SingleX, ControlChars.NewLine, "SY: ", SingleY, ControlChars.NewLine, "SZ: ", SingleZ, ControlChars.NewLine))
Dim DoubleX As Double = CDbl(SingleX)
Dim DoubleY As Double = CDbl(SingleY)
Dim DoubleZ As Double = CDbl(SingleZ)
Console.WriteLine(String.Concat("DX: ", DoubleX, ControlChars.NewLine, "DY: ", DoubleY, ControlChars.NewLine, "DZ: ", DoubleZ))
Console.ReadLine()
End Sub
结果是
SX: 0.4
SY: 0.94
SZ: 0.6
DX: 0.400000005960464
DY: 0.939999997615814
DZ: 0.600000023841858