2013-02-18 44 views
5

在我的MySQL數據庫中,我有字段DECIMAL(23,5),因此小數點後面有5位數字。現在,當我將查詢像這樣:Mysql decimal:floor而不是round

UPDATE my_table SET my_decimal_field = 123.123456789 WHERE id = 1 

,然後我會取這個紀錄:

SELECT id, my_decimal_field FROM gijhars WHERE id = 1 

我得到這樣的結果:

+------+------------------+ 
| id | my_decimal_field | 
+------+------------------+ 
| 5733 | 123.12346  | 
+------+------------------+ 

等等,當然,MySQL是四捨五入這些值,如果它們在小數點後有6位以上的數字。是否有任何設置在MySQL中,以這些數值爲而不是四捨五入?

+2

http://dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html _When這樣的列分配以下以多位數的值小數點比permi按照指定的比例,該值將轉換爲該比例。 (精確的行爲是特定於操作系統的,但通常效果會截斷到允許的位數。)_ – 2013-02-18 12:30:01

+1

無法使用http://dev.mysql.com/doc/refman/5.0/en/mathematical- functions.html#function_floor? – 2013-02-18 12:44:49

+0

是的,我可以,只是好奇,如果它可以通過配置完成,因爲我需要在整個應用程序中的這種行爲。 – 2013-02-18 12:48:15

回答

6

doc

當這樣的列被分配跟隨在小數點比由指定的刻度允許更多的數字值,該值被轉換成比例。 (精確的行爲是特定於操作系統,但一般效果截斷到數字的允許數量。

如果不是您的操作系統的話,那麼你可以處理這同時更新與truncate

UPDATE my_table 
SET my_decimal_field = truncate(123.123456789, 5) 
WHERE id = 1 

SQLFiddle demo