Показать сообщение отдельно
Старый 28.06.2010, 10:20   #1  
driller is offline
driller
Сам.AX
Аватар для driller
Самостоятельные клиенты AX
SAP
 
78 / 54 (2) ++++
Регистрация: 11.04.2007
Адрес: Санк-Петербург
Ошибка в функции str2num при обработке данных в экспоненциальном формате (плавающей запятой, научной нотацией).
Добрый день.

DAX 4.0 - Kernel version: 4.0.2503.516, Application version: 4.0.2501.347

Столкнулся с этой ошибкой при заливке остатков из 1С из файла excel, при обработке чисел с плавающей запятой малой величины, функция возвращает некорректный результат.
После анализа стало видно что ошибка возникает, когда в обрабатываемых данных из excel не стоит разделитель.

Вот демонстрация ошибки:
X++:
static void errorStr2num(Args _args)
{
    Qty qty1, qty2, qty3;
    ;
    qty1    = str2num('1e-3');
    qty2    = str2num('5.6e-2');
    qty3    = str2num('1.e-3');

    info(strFmt('%1 %2', num2str(qty1,0,3,2,0), 'Ошибка ожидаем 0,001'));
    info(strFmt('%1 %2', num2str(qty2,0,3,2,0), 'Без ошибки'));
    info(strFmt('%1 %2', num2str(qty3,0,3,2,0), 'Без ошибки'));
}
Название: 4-ка.jpg
Просмотров: 1629

Размер: 34.8 Кб

Причём в 3-ке MBS Axapta 3.0 Build #1951.7609/514-320 SP4/OP032-196 всё работало корректно.

Название: 3-ка.jpg
Просмотров: 1817

Размер: 34.7 Кб


Как вариант обхода ошибки можно использовать функцию any2real, или в обрабатываемом файле заменить разделитель с запятой на точку, это приводит к тому что данные из excel (пробовал на 2007-ом) подтягиваются не в экспоненциальном формате.

Подскажите исправлен ли баг в последующих версиях, если нет как зарегистрировать эту ошибку в microsoft?
__________________
"Считать метафору доказательством, поток праздных слов источником истины, а себя оракулом - это заблуждение, свойственное всем нам."
Поль Валери

Последний раз редактировалось driller; 28.06.2010 в 10:22.
За это сообщение автора поблагодарили: kashperuk (5).