將單個值轉換爲雙值值時出現問題。將單個值轉換爲雙倍值
由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