我發現了一個非常有趣的事情,將字符串解析爲一個浮點值。的情況下是該字符串值是從通過使用IDbReader這裏數據庫獲得的一個例子:.net解析()四捨五入浮點值
IDbReader myReader;
...
string sValue = myReader.GetValue(0).ToString(); // 12.339123 for example in VS debug and watch
// the content of sValue is what I want to be at this point, but...
Single fValue = Single.Parse(sValue);
// Now the fValue is 12.34!
如果我測試只是解析對於恆定弦,Parse方法正常工作:
string sValue = "12.339123";
Single fValue = Single.Parse(sValue);
// Now the fValue is 12.339123!
我不知道爲什麼從IDbReader的sValue的內容不能被解析爲原始值(正如我可以看到從VS調試)。它將浮點值舍入爲小數點後2位數的浮點值。我怎樣才能獲得原始價值?
我如何得到完全相同的值?
我使用NET 2.0
更新:我試圖用的getXXX如GetFloat或GetDecimal方法直接得到的值到一個浮點/十進制值。不幸的是,所有這些方法似乎都有類似的舍入問題。只有GetValue()和強制爲字符串纔會獲得與數據庫中完全相同的字符串值。我認爲我可以在.Net端進行浮點或小數值轉換,但在我的情況下,Parse()失敗。我不確定爲什麼舍入發生在Parse()中。正如一些人建議的價值在那裏,它可能是VS調試,監視或日誌造成四捨五入。但是,當我嘗試將浮點值放到文本框中時,它會在小數點後四捨五入爲2位數。這真是一個令人沮喪的問題。
爲什麼它是一個字符串? – SLaks 2011-12-14 18:07:33
並非所有``「12.339123」`是相等的。 – 2011-12-14 18:09:27
該列的數據類型是什麼? – 2011-12-14 18:11:40