2013-02-18 37 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