我开发了一个系统,通过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 < / strong>而不是 0.0886 。
Sage中的产品数据库包含大约5500条记录,超过50%包含4位小数格式的价格,手动输入价格远非理想,也会使同步变得不值得。
我希望我已经足够详细地解释了这个问题,以便有人提供帮助。
答案 0 :(得分:0)
虽然我对上述问题没有答案,但我现在已经解决了这个问题。
我使用相同的ODBC连接器将相同的数据从Sage中提取到Excel中。在这样做我得到了正确的价格,I.E没有四舍五入到小数点后两位。我再次检查了PHP代码,但无法找到可能导致舍入问题的任何内容。
虽然我的解决方案相当复杂而不是修复上面的代码,但它确实有效。我现在导出到excel,上传到MySQL中的临时表,然后运行更新查询以更新已存储在表中的价格。