1

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

我的查询是:

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

我也尝试将am_discount字段设置为%uand %f,但似乎没有什么不同。

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

我错过了什么?

4

4 回答 4

1

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

对于向 DECIMAL 或整数列中的插入,目标是精确数据类型,因此舍入使用“从零取整的一半”,而不管要插入的值是精确的还是近似的。

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

于 2014-01-18T00:19:08.573 回答
1

尝试 :

$save = sprintf("INSERT INTO discount  SET am_discount = '".$_POST['am_discount']."',
                tx_discount = '".mysql_escape_string($_POST['tx_discount'])."' ");
于 2012-11-05T12:14:28.083 回答
1

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

请将您的表格列属性更改为“浮动”。

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

于 2012-11-05T12:16:16.110 回答
0

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

%d The argument is treated as an integer and presented as a (signed) decimal number.
于 2020-07-31T09:48:46.537 回答