2012-11-05 136 views
1

雖然我已經將數據庫設置爲DECIMAL(10,4),但我將小數插入到MYSQL數據庫中,但最終在數據庫中的值是四捨五入的。例如,我的折扣設定爲6.5,數據庫記錄它作爲7mysql十進制舍入

我的查詢是:

$save = sprintf(" 
INSERT INTO discount 
SET   am_discount = %d, 
       tx_discount = '%s' 
", 
    $_POST['am_discount'], 
    mysql_escape_string($_POST['tx_discount']) 
); 

我已經試過am_discount字段設置爲%u%f爲好,但它不」 t似乎有所作爲。

正如我所提到的,我的MYSQL數據庫中的am_discount字段設置爲DECIMAL (10,4),我也嘗試過(10,2)和(8,2)。

我錯過了什麼?

+0

你能在這裏顯示錶格結構嗎? – Bajrang

回答

1

嘗試:

$save = sprintf("INSERT INTO discount SET am_discount = '".$_POST['am_discount']."', 
       tx_discount = '".mysql_escape_string($_POST['tx_discount'])."' "); 
+0

工作,謝謝。 – evilscary

1

它似乎是數據庫表列財產問題,如果有一個人能支持我就可以了。

請將您的表列屬性更改爲「Float」。 (M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。MySQL允許非標準語法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。在這裏,「(M,D)」意思是總共可以存儲多達M位的數值,其中D位可以在小數點後面。例如,定義爲FLOAT(7,4)的列在顯示時看起來像-999.9999。 MySQL在存儲值時執行四捨五入,因此如果將999.00009插入到FLOAT(7,4)列中,則近似結果爲999.0001。

參考: http://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html

+0

感謝您的回答,但我的印象FLOAT不準確。我想使用輸入的值來計算總計,這就是爲什麼我選擇了DECIMAL。 – evilscary

0

它不是一個數據庫表列屬性問題。十進制是正確的列類型。

對於插入到DECIMAL或integer列中,目標是精確的數據類型,因此舍入使用「從零開始舍入一半」,無論要插入的值是精確還是近似。詳細請參照http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.html