AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.08.2009, 18:50   #1  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Ошибка вычислений
Посмотрите на результаты вычислений вот такого джоба
X++:
static void Job5(Args _args)
{

    date dt1;
    date dt2 = 29\08\2009;
    
    Int64 d1 = date2Num(dt1);
    Int64 d2 = date2Num(dt2);
    Int64 ret1 = (date2Num(dt1) - date2Num(dt2)) * 86400;
    Int64 ret2 = (d1 - d2) * 86400;
    print ret1;
    print ret2;

    pause;
}
Очень интересный результат.
Все это на DAX2009
Старый 27.08.2009, 19:02   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Все просто. Переполнение. date2Num возвращает int, а не int64. Следовательно результатом этого
X++:
date2Num(dt1) - date2Num(dt2)
будет int. Потом этот int умножается на 86400 где и происходит переполнение.
В другом случае Вы работаете уже с Int64.

Последний раз редактировалось _scorp_; 27.08.2009 в 19:05.
За это сообщение автора поблагодарили: Starling (1).
Старый 27.08.2009, 19:06   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Переполнение.
Думаю, в .NET тоже такое произойдет. Так как явно не указано, какой тип будет, используется тип первого оператора

Попробуйте так:
X++:
Int64 ret1 = any2Int64((date2num(dt1) - date2num(dt2))) * 86400;
То есть это не баг
За это сообщение автора поблагодарили: Starling (1).
Старый 27.08.2009, 19:09   #4  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Попробуйте так:
X++:
Int64 ret1 = any2Int64((date2num(dt1) - date2num(dt2))) * 86400;
То есть это не баг
Так без ошибок.
Теги
ax2009

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка в логе при установке клиента AX 2009 sao DAX: Администрирование 9 04.02.2010 11:56
Не запускается Axapta. Общая ошибка сети. Lucky13 DAX: Администрирование 3 25.09.2007 13:02
Ошибка в формате числа. 36AC DAX: Программирование 7 19.10.2006 10:04
Ошибка при обработке С-Ф Sergo DAX: Программирование 7 20.01.2006 11:56
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:50.