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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.05.2007, 11:25   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Аналог round() возвращающий int
Добрый день.

Нет и стандартного аналога round(), возвращающего int? Цель - избежать предупреждения - "Присвоение/Сравнение теряет точность.".
Старый 21.05.2007, 11:33   #2  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Я думаю что нет. Так как это получается функция котороя должна округляць только до целого и целое. Но ее же не проблема написать.
Старый 21.05.2007, 11:39   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
any2int(round(...
Старый 21.05.2007, 11:42   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Спасибо. Надежно работает? Есть у меня некоторое опасение при использовании функций с префиксом/суффиксом 'any'.
Старый 21.05.2007, 11:46   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
не проверял - просто как предположение. Вообще в приложении вроде используется...

Мне кажется, решать задачу исключения ворнингов имеет смысл только при разработке собственных крупных модулей.
Старый 21.05.2007, 11:51   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Мне кажется, решать задачу исключения ворнингов имеет смысл только при разработке собственных крупных модулей.
В общем то, так и есть. Проблема в том, что модуль активно использует com_exceldocument_ru, который и является основной причиной ворнингов.
Старый 21.05.2007, 12:13   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Кстати, я правильно помню, что отсутствие вызова конструктора в классе-наследнике конструктора предка есть, в общем то, ошибка проектирования классов? О чем компилятор мне и говорит - "Новый метод производного класса не вызывает super()." (ComExcelDocument_ru.new()).
Старый 21.05.2007, 12:15   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Кстати, я правильно помню, что отсутствие вызова конструктора в классе-наследнике конструктора предка есть, в общем то, ошибка проектирования классов?
Нет.
__________________
полезное на axForum, github, vk, coub.
Старый 21.05.2007, 12:17   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
не обязательно проектирования. Просто могут забыть его позвать, если и так работает. При этом есть вероятность возникновения ошибки, если в базовом классе добавят инициализацию.
Старый 21.05.2007, 12:24   #10  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Нет.
Почему так категорично? Давай порассуждаем.

Назначение конструктора - инициализация внутренних структур данных класса.
Если мы создаем наследника - значит, мы ожидаем, что он будет пользоваться данными предка.
Если мы не вызываем конструктор предка значит мы допускаем потенциальную возможность, что класс-наследник обратится к неициализированным данным предка, что может быть большой проблемой.

Решения, которые я вижу:
1) Вызывать конструктор предка.
2) Выносить переменные, которые не должны использоваться наследниками в отдельные классы (или скрывать их каким-то другим способом, если это позволяет делать язык разработки).
Старый 21.05.2007, 12:44   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Почему так категорично? Давай порассуждаем.
Прежде договоримся о терминах.
Конструктором в Аксапте называется статичный метод Constuct.
Его задача: создать экземляр класса конкретного типа на основании переданных параметров.

См. раздел Construct class pattern в Best Practice.
Цитата:
...use a construct method to instantiate the correct subclass for you
Этот паттерн основан на паттерне Фабричный метод

По идее, конструктор родителя иерархии классов должен вызывать контрукторы своих детей. Но в Аксапте разработчики "упростили" код и контруктор родителя всегда инициализирует детей через new.

Т.е. по замыслу разработчиков конструктор должен быть один и должен находится в корне иерархии.


(Если ты под конструктором подразумевал метод new, то я с тобой полностью согласен: у каждого класса должен быть свой new)
__________________
полезное на axForum, github, vk, coub.
Старый 21.05.2007, 12:46   #12  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
(Если ты под конструктором подразумевал метод new, то я с тобой полностью согласен: у каждого класса должен быть свой new)
Да, я про new().

Мое сообщение ранее:
Цитата:
О чем компилятор мне и говорит - "Новый метод производного класса не вызывает super()." (ComExcelDocument_ru.new()).
Извини, если ввел в заблуждение.
Старый 21.05.2007, 12:49   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андре Посмотреть сообщение
Да, я про new().
Виноват.
Да, new у каждого свой и new потомка должн содержать super().
__________________
полезное на axForum, github, vk, coub.
Старый 21.05.2007, 12:53   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Конструктором в Аксапте называется статичный метод Constuct

Единственное упоминание слова constructor в "Construct class pattern" относится к new: "...have a no parameters, or the same parameters as the default new constructor (it is recommended that you do not have parameters on new)"
Старый 21.05.2007, 13:03   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Единственное упоминание слова constructor
Ищи слово construct.

Вот еще с раздела Class constructors and destructors

Цитата:
construct
The class hierarchy has one public constructor with no parameters that will deliver the correctly initialized class object.
__________________
полезное на axForum, github, vk, coub.
Старый 21.05.2007, 13:11   #16  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Все они конструкторы...
Старый 21.05.2007, 16:43   #17  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Андре Посмотреть сообщение
Надежно работает? Есть у меня некоторое опасение при использовании функций с префиксом/суффиксом 'any'.
собственно, если вернуться к исходному вопросу, кроме round() есть еще, возможно, более подходящая в данной ситуации функция decRound(real number, int decimals), округляющая number до нужного числа десятичных разрядов. Впрочем, вызов decRound(number, 0) и round(number, 1.0), видимо, будут эквивалентны.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: Convergence Sessions Round-up Blog bot DAX Blogs 0 13.03.2008 19:05
Есть ли в самой АХ некий аналог сервисов? kostas DAX: Администрирование 5 13.03.2008 14:04
closeDocument(boolean _save = false, int _workBook = 1) Daido DAX: Программирование 1 03.11.2007 09:58
аналог BETWEEN есть в системе Daido DAX: Программирование 3 27.09.2007 14:53
public int messageProc(FormControl _control, int _message, int _wParam, int _lParam) Yuri Safronov DAX: Программирование 2 31.10.2002 19:21

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:03.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.