将单个值转换为双值值时出现问题。将单个值转换为双倍值
由BitStream提供的单数是简单的2至6位十进制数,在许多情况下,只需0.4,0.94,0.6等简单(我应该注意,我收到的文档声明它们是Floats(在Java中),根据我的理解,它与.NET中的Single相同。
我最终需要这些值作为双精度值,因为它们将用作Point3D对象(X,Y和Z)的坐标,并最终用于但是,当我使用CDbl(valueAsSingle)或Ctype(valueAsSingle,Double)执行转换时,该数字在Double中添加了额外的小数位数,第9个数字一个nd小数点后一位。这会导致最终需要使用这些值的应用程序出现问题。
首先,我很好奇为什么会发生这种情况?其次,如果我简单地将Single转换为字符串,然后执行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
那奇怪的行为。我很想知道为什么会发生这种行为。 –
如果要使用从数字到字符串的双向直接转换,并确保使用'x.ToString(“R”)'(请参阅http://msdn.microsoft.com/zh-cn/library/dwhawy9k( v = vs.110).aspx) – ja72
阿波罗计划有同样的问题。我认为有些事情在他们想出来之前就爆发了。 – blindguy