| 
			
			 | 
		#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('Все в порядке'); }  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Надо в функции getPrice объявить переменную ret типа real и возвращать ее. 
		
		
		
		
		
		
		
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано Hezl  
Надо в функции getPrice объявить переменную ret типа real и возвращать ее. PHP код: 
	
			
	Результат функции объявлен как real но тем не менее может возвращать значения отличные от real типа, что нехорошо. Для решения проблемы можно просто возвращать не 0 а 0.0 о чем сказано в комментарии.  | 
| 
	
 |