2012-10-12 113 views
0

我創建了一個GUI,它將一個數值輸入到另一個程序中,並將它們存儲在tags中。我有一個奇怪的轉換問題。當我輸入8.5時,我得到一個字符串8.500000000000000 ...所以我使用TryParseDouble.ToString()方法來解決這個問題。但奇怪的是,當我嘗試6.9字符串變成6.9000000005367431600000.I使用2 DLL可能是這個問題的原因。我讀過這Decimals explanation,但我不明白這是如何解決我的問題。如何解決這個轉換問題?如何解決此轉換問題?

我的轉換方法

private bool TryWrite() 
      { 
// Read() returns a string(which represents int,double, float or string) read from another application 
       string Oldcopy = _inTouchWrapper.Read(tagNameBox.Text); 
// Write() Write my input number into the application stored in a specific tag 
       _inTouchWrapper.Write(tagNameBox.Text, ValueBox.Text); 
//OldCopy is to input back the old copy is the Write (new copy) cannot be performed 
       string newCopy = _inTouchWrapper.Read(tagNameBox.Text); 

       if (ValueBox.Text == Double.Parse(newCopy).ToString()) 
       { 
        return true; 
       } 
       else 
       { 
        _inTouchWrapper.Write(tagNameBox.Text, Oldcopy); 
        return false; 
       } 
      } 

更多解釋有關軟件/和我的代碼。該軟件的標籤例如:Alarm1,TimeString ... 每個標籤都有一個類型(int,real(float),string)和一個值。該值取決於類型。如果標籤類型是int,我不能輸入5.6。所以我創建了這種方法,驗證是否確實可以在軟件中添加輸入值。 它是如何工作的:我在軟件中輸入一個值,讀回來,如果添加的值與讀取值匹配,我的確輸入了它。否則,我輸入舊的拷貝。

+1

可能是一個2 DLL的問題?你測試了嗎?您可以使用.ToString(「N1」)來獲取一位小數。 – Paparazzi

+0

@Blam,我還是一個新手程序員,我不知道如何測試一個DLL。 我已經從Telerik下載JustDecompile並嘗試瞭解它,但我沒有創建dll。做這件事的人說,在dll中可能存在轉換問題。 –

+0

@Blam謝謝,我沒有想過重載的ToString。我最近了解到一些.net功能已經超載。 –

回答

1

看來,字符串「6.9」不是直接轉換爲double。如果首先轉換爲浮動,然後轉換爲雙倍。這裏有一個例子:

var f = float.Parse("6.9"); 
var d = (double)f; 
System.Diagnostics.Debug.WriteLine(d.ToString()); //6.90000009536743 

PS:爲什麼你不能有同樣的問題與「8.5」是,它可以精確地以二進制形式來表示。