odbc возвращает 2 десятичных знака вместо 4

Я разработал систему, которая получает данные о продуктах из учетных записей Sage 50 через разъем ODBC. Синхронизация работает отлично, но я очень сильно борюсь с ценами на продукты, которые округляются вверх / вниз, и я не могу понять, почему. Я тщательно исследовал это, однако, насколько я могу судить, это не обычное явление.

Код для получения данных от 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. Я проверил, что я получаю из Мудреца, и это 0,09 так что это не вставка, которая портит фигуру.

Из функций, которые я нашел на странице ODBC в руководстве по php, я обнаружил следующее в столбце:

odbc_field_type = DOUBLE
odbc_field_scale = 4
odbc_field_len = 15

Таким образом, я вижу, что точность этого поля в Sage составляет 4 знака после запятой, что неудивительно, поскольку вы можете хранить 0,1234 как цену продукта, но я не знаю, почему получаю 0,09 вместо 0,0886.

В базе данных продуктов в Sage хранится около 5500 записей, и более 50% содержат цены в формате с четырьмя десятичными знаками. Ручной ввод цен далек от идеала и также сделал бы синхронизацию менее целесообразной.

Я надеюсь, что я объяснил эту проблему достаточно подробно, чтобы кто-то мог помочь.

0

Решение

Хотя у меня нет ответа на вышеуказанный вопрос, я теперь решил проблему.

Я вытащил те же данные из Sage в Excel, используя тот же разъем ODBC. При этом я получил правильные цены, т.е. нет округления до 2 знаков после запятой. Я еще раз проверил код PHP, но не смог найти ничего, что могло бы вызвать проблему с округлением.

Хотя мое решение довольно запутанное, вместо исправления приведенного выше кода, оно работает. Теперь я экспортирую в Excel, загружаю во временную таблицу в MySQL, а затем запускаю запрос на обновление, чтобы обновить цены, уже сохраненные в таблице.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]