我开发了一个通过 ODBC 连接器从 Sage 50 Accounts 获取产品数据的系统。同步效果很好,但是我在产品价格向上/向下四舍五入时遇到了巨大的困难,我不知道为什么。我对此进行了广泛的研究,但是据我所知,这并不常见。
从 Sage 获取数据的代码:
$sql = "SELECT STOCK_CODE, DESCRIPTION, SALES_PRICE, QTY_IN_STOCK FROM stock";
$r = odbc_exec($conn, $sql);
$x = 0;
$ignores=array('',);
while ($row = odbc_fetch_row($r)) {
for ($i = 1; $i <= odbc_num_fields($r); $i++)
$results[$x][odbc_field_name($r, $i)] = odbc_result($r, $i);
$x++;
}
我在 Sage 有一个产品,价格为0.0886但是当它插入我的 MySQL 数据时它是0.09。我检查了我从 Sage 中得到了什么,它是0.09,所以不是插入物弄乱了这个数字。
从我在 php 手册中的 ODBC 页面上找到的函数中,我在相关列中发现了以下内容:
odbc_field_type = DOUBLE
odbc_field_scale = 4
odbc_field_len = 15
所以我可以看到 Sage 中这个字段的精度是小数点后 4 位,这并不奇怪,因为您可以将 0.1234 作为产品价格存储,但我不知道为什么我得到0.09而不是0.0886。
Sage 中的产品数据库包含大约 5500 条记录,超过 50% 包含小数点后 4 位格式的价格,手动输入价格远非理想,而且还会降低同步的价值。
我希望我已经足够详细地解释了这个问题,以便有人提供帮助。