mysql十进制舍入

时间:2012-11-05 12:09:26

标签: mysql insert decimal rounding

我在我的MYSQL数据库中插入小数,但最终在数据库中的值是四舍五入的,尽管我已将数据库设置为DECIMAL(10,4)。例如,我将折扣设置为6.5,DB将其记录为7。

我的查询是:

$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,但似乎没有任何区别。

正如我所提到的,我的MYSQL数据库中的am_discount字段设置为DECIMAL (10,4),我也尝试过(10,2)和(8,2)。

我错过了什么?

4 个答案:

答案 0 :(得分:1)

尝试:

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

答案 1 :(得分:1)

它似乎是数据库表列属性问题,如果有人可以认可我。

请将您的表列属性更改为“Float”。

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

答案 2 :(得分:1)

它不是数据库表列属性问题。十进制是正确的列类型。

对于插入DECIMAL或整数列,目标是精确的数据类型,因此舍入使用“从零开始的一半”,无论要插入的值是精确的还是近似的。

有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.html

答案 3 :(得分:0)

实际上,这与数据库无关。这是%d的sprintf行为。

%d The argument is treated as an integer and presented as a (signed) decimal number.