0

我开发了一个通过 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 位格式的价格,手动输入价格远非理想,而且还会降低同步的价值。

我希望我已经足够详细地解释了这个问题,以便有人提供帮助。

4

1 回答 1

0

虽然我对上述问题没有答案,但我现在已经解决了这个问题。

我使用相同的 ODBC 连接器将相同的数据从 Sage 提取到 Excel 中。在这样做时,我得到了正确的价格,IE 没有四舍五入到小数点后 2 位。我再次检查了 PHP 代码,但找不到任何可能导致舍入问题的内容。

虽然我的解决方案相当复杂,而不是修复上述代码,但它确实有效。我现在导出到 excel,上传到 MySQL 中的临时表,然后运行更新查询来更新已经存储在表中的价格。

于 2018-04-24T15:35:46.290 回答