ODBC コネクタ経由で Sage 50 アカウントから製品データを取得するシステムを開発しました。同期はうまく機能しますが、製品価格が切り上げ/切り下げされることに非常に苦労しており、その理由がわかりません。私はこれを広範囲に調査しましたが、私が知る限り、それは一般的な出来事ではありません.
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の価格の製品を 1 つ持っていますが、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.0886ではなく0.09を取得しているのかわかりません。
Sage 内の製品データベースには約 5500 のレコードがあり、50% 以上に小数点以下 4 桁の形式の価格が含まれています。価格を手動で入力するのは理想的とは言えず、同期の価値も低くなります。
誰かが助けてくれるように、この問題を十分に詳しく説明できたことを願っています。