|  03.03.2005, 17:54 | #1 | 
| Участник | X++ иногда не контролирует тип результата метода 
			
			Тип возвращаемого методом значения не приводится к объявленному типу. Axapta 3.0 SP2 Пример : Тип метода getPrice() объявлен как real, а реально возвращается тип integer. Видимо приведение типов происходит уже вне метода. static void JobTestBugTypes() { Amount amount = 10; Qty qty = 0; Array sArray = new Array(Types::Real); real r; anytype any; types tAny; types tR; real getPrice( real _costValue, real _qty) { if (_qty !=0) return _costValue / _qty; else return 0; // глюки пропадут если здесь // сразу поставить явно константу типа real // например 0.0 } ; r = getPrice(amount, qty); tR = typeOf(r); info(strFMT('r : Реально получили значение типа %1', tR)); any = getPrice(amount, qty); tAny = typeOf(any); info(strFMT('any : Реально получили значение типа %1', tAny)); sArray.value(3, getPrice(amount, qty) ); // здесь exception будет "Несовпадение типов" sArray.value(3, any ); // и здесь был бы если бы дошли info('Все в порядке'); } | 
|  | 
|  03.03.2005, 18:19 | #2 | 
| Участник | 
			
			Надо в функции getPrice объявить переменную ret типа real и возвращать ее. PHP код: 
			 | 
|  | 
|  03.03.2005, 18:28 | #3 | 
| Участник | Цитата: 
		
			Изначально опубликовано Hezl  Надо в функции getPrice объявить переменную ret типа real и возвращать ее. PHP код: 
			Результат функции объявлен как real но тем не менее может возвращать значения отличные от real типа, что нехорошо. Для решения проблемы можно просто возвращать не 0 а 0.0 о чем сказано в комментарии. | 
|  |