【问题标题】:PHP + MySQL Irregular Calculation issues above a millionPHP + MySQL 不规则计算问题过百万
【发布时间】:2020-03-12 05:57:01
【问题描述】:

当我尝试使用 PHP 函数补货时遇到一个非常奇怪的问题。

函数如下:

function add_stock($products_id, $add_quantity) {
global $db;
$db->Execute("update " . TABLE_PRODUCTS . "
                  set products_quantity = products_quantity + " . (int)$add_quantity . ", products_ordered = products_ordered - " . (int)$add_quantity . " where products_id = '" . (int)$products_id . "'");
}

所以,在上述函数中,我关注的区域是products_quantity 添加到$add_quantity 时。

一切正常,但是当我测试一个数量为 1 000 000 或更多的产品时,它会进行奇怪的计算。

例如,测试产品的数量为 1 000 000。使用该函数添加 8 使其成为 1 000 010。因此,它不是添加 8,而是添加了 10。我使用 6 和 8 再次运行它,结果为1 000 020 然后是 1 000 0030。就像 10 的增量一样。我很困惑。

我在其他十几种数量低于一百万的产品上进行了尝试,每次都完美无瑕。

编辑:通过 cmets 询问后 - products_quantity 的数据类型为 FLOAT。

【问题讨论】:

  • products_quantity的数据类型是什么?
  • 如果你使用准备好的语句而不是连接变量会更好。
  • 我假设您使用的是 FIXED PRECISION 数据类型,而不是浮点数,对吧?也就是说,使用以下之一:DECIMAL、NUMERIC、INT、BIGINT。
  • 你减去的products_ordered有什么作用?
  • FLOAT 精度低,需要四舍五入。那就是问题所在。将数据类型更改为我提到的一种。

标签: php mysql calc


【解决方案1】:

FLOAT 精度低,需要四舍五入。那就是问题所在。

将列的数据类型更改为DECIMALNUMERICINTBIGINT

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2012-08-06
    • 2013-03-22
    相关资源
    最近更新 更多