2014-08-28 90 views
1

當插入一個浮動到一個SQL Server數據庫中,我得到:C#浮不插入的確切價值

5.03000020980835 

這是不是正在被收集的精確值。

我是如何收集這個浮球?通過文本框控件轉換爲浮動

如何我目前正在與數據的工作:

private void PayRateTextBox_TextChanged(object sender, EventArgs e) 
    { 
     PayRateBox = float.Parse(PayRateTextBox.Text); 
    } 

以上是設置內部浮到被設置在當前更新文本框:

private float PayRateBox = 0; 

然後插入如:

string Query = "INSERT INTO shifts (ShiftDate,WeekNumber,Hours,PayType,Rate) " + 
       "VALUES(@Date, @WeekNo, @Hours, @PayType, @Rate)"; 

並結合到經由粘結的p該查詢arameters:

CMD.Parameters.Add("@Rate", SqlDbType.Float); 
CMD.Parameters["@Rate"].Value = PayRate; 

文本框中的默認文本沿着其他數據被追加到使整個價值增值的線設定爲5.03,這樣的地方。我試圖追蹤發生這種情況的地點,但無法找出發生這種情況的原因和原因。也許我忽略了一些東西?

+7

浮點數不準確,所以這應該不會令人驚訝。 – 2014-08-28 00:20:29

+3

如果它確切地是5.03,你認爲'decimal.Parse'並將它存儲在一個'Decimal'類型的列中嗎?更多信息:[小數與雙精度:我應該使用哪一個?](http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when) – 2014-08-28 00:20:41

+1

@GrantWinney對Table和活動代碼進行更改後。它像一個魅力。表格的新結構是'decimal(3,2);'和'float'相同 – 2014-08-28 00:28:56

回答

4

float的精確度僅限於7位有效數字。在你的情況下,這意味着5.030000。其餘小數位的值未定義。

要提高精確度,請使用double,精度爲15-16個有效數字或decimal,使用28-29個有效數字。

+0

可以在1分鐘內接受答案,但如果7位數字後失去精度,會發現它有點設計錯誤 – 2014-08-28 00:32:02

+0

有時候精確度取決於你想解決的問題,7位數就足夠了。另外,'float'只有4B的大小,而'double'是8B和'decimal'16B。所以花車會節省你的記憶。 – 2014-08-28 00:34:44

+0

@DarylGill那麼你將如何設計一個具有7位以上精度的32位浮點數?如果你沒有給出指數的空間(基本上是一個int),你可以做的最好是10位數字 – 2014-08-28 00:35:23