powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / тип значения float функция фозвращает результат отчилчительный от процедуры
25 сообщений из 44, страница 1 из 2
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719326
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

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

Но по факту например:
функция процедура
8606,825 8606,82499999999
8649,89499999999 8649,89500000001
24184,2449999999 24184,245
15802,005 15802,005

тобиш иногда совпадают иногда нет

думаю что связано это с типом float , но как добиться чтобы данные были идентичны (при чем надо именно процедуру подогнать под функцию).
потомучто если округлять до 2 знаков после запятой то в зависимости о того какое значение флоат оно округляет иногда в большую иногда в меньшую сторону и так как значения разные то и копейка гуляет туда сюда.
Есть какие либо соображения?
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719329
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyесть функция она возвращает результат с округлением одним а процедура с другим
Вы действительно спрашиваете, почему разный код дает разный результат?
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719336
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,
код идентичный, что в процедуре что в табличной функции
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719338
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyГавриленко Сергей Алексеевич,
код идентичный, что в процедуре что в табличной функцииЭто вам только так кажется.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719339
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,
и в чем же разница
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719341
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyГавриленко Сергей Алексеевич,
и в чем же разница
в коде
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719342
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyГавриленко Сергей Алексеевич,
и в чем же разницаВ вашем коде.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719343
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,
Вернее есть какие либо механизмы победить несовпадение
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719344
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyГавриленко Сергей Алексеевич,
Вернее есть какие либо механизмы победить несовпадениеИсправить неправильный код.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719345
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyГавриленко Сергей Алексеевич,
Вернее есть какие либо механизмы победить несовпадение
показать код
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719348
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
процедура полная

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
create procedure [dbo].[my_procedure]

	@Kodr_list	kodR_list   READONLY,
	@FOR_DATE				date = NULL, 
	@SLOT					INT = 0
as

begin
	
			create table #abon  (
							kodr	    int
							);
			create index indx_abon_temp on #abon(kodr);

			insert into #abon
			select * from @Kodr_list;
		
		with tmps (KODR, DATIC, chkode, cntrkod)
					as (

						select  
							c.KODR as KODR,
							c.DATIC as DATIC,
							c.changekey AS chkode,
							c.counterr AS cntrkod
						from change c
						join #abon a on a.kodr=c.KODR
						where c.DATIC=
										(SELECT  max(c1.datic) as fg
												 FROM change c1
												 where c1.datic<=@FOR_DATE
												 and c1.KODR=c.KODR
												 and c1.counterr is not null)
												 )


		select 
			cast(isnull(con.initvalue,0)+ isnull(val.Values_Sum,0) as float) as SCURRENT,
			ch.cntrkod,
			CH.chkode,
			ch.kodr ,
			null		as slot
			 from counter con
			join  tmps ch 
			on con.counterkey = ch.cntrkod
			join 	(
					select sum(coalesce(isnull(vdiffer, 0) + isnull(vfree, 0), 0)) as Values_Sum
						,counterr
					 from valuic 
					 where checkdate <= @FOR_DATE
					 and ischecked <> 0 
					 group by counterr
					 ) val
			on val.counterr = ch.cntrkod
			where ch.cntrkod is not null


	drop table #abon
end;



Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719349
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
функция урезанная только расчет

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
create FUNCTION [dbo].[my_function]
(
	@ABONID					int = NULL,
	@FOR_DATE				date = NULL, 
	@SLOT					INT = null
)
RETURNS
@SelTable TABLE (SCURRENT Float, SCOUNTERR int)
AS 
BEGIN

declare  @VALUE_KEY INT, 
         @CHANGE_KEY INT, 
         @COUNTER_KEY INT,  
         @TEMPVALKEY INT,
         @CHANGE_DATE date, 
         @INIT_COUNTER float, 
         @VALUES_SUM FLOAT, 
         @TMPCHECKDATE DATE, 
         @OWNER_COUNTER_KODR int,
		 @tmpcoefflosses float

DECLARE  @scurrent float, 
         @scounterinit float, 
         @scounterr INT, 
         @scheckdate date, 
         @svaluekey INT, 
         @showing_found int,
		 @coefflosses float

set @scurrent=0 ; /* возвращает текущее Показание на Дату.
Это ГЛАВНЫЙ возвращаемы параметр, остальные -- вспомогательные */
set @scounterinit=0 /* если Последнее показание было найдено как "Иниц.Значению на счетчике" -- сюда оно возвращается. Инче -- 0.*/
set @scounterr = null  /* тоже самое -- ссылка на тот счетчик*/
set @scheckdate = null /* если последнее Показание найдено было как Показатель, то сюда возвращается Дата того Показания */
set @svaluekey=0       /* то же самое, -- ссылка на то Показание */
set @showing_found = 0  /* этот параметр: 0 -- если вообще никакой инфы про текущее показание не было найдено, например, если по Норме абонент. При этом, конечно же, остальные параметры можно игнорировать.
1 -- если информация найдена  */
SET @OWNER_COUNTER_KODR =NULL  /* Поле "Владелец счетчика" Counter.OwnerR. Если это ЧУЖОЙ счечтик то входное поле abonid не равно этому полю.*/
set @Value_Key = null
--Change_Key = null;
set @Counter_Key = null
set @Change_Date = null
set @Init_Counter=0
set @Values_Sum=0
 
DECLARE @datic date                      


 if (@counter_key is not null) 
 begin
   select @init_counter = initvalue
	 from counter 
	where counterkey = @counter_key --into Init_Counter, owner_counter_kodr;

   set @scounterinit = @init_counter
   set @scounterr = @counter_key
   set @scurrent = @init_counter
   
   select @Values_Sum = sum(coalesce(isnull(vdiffer, 0) + isnull(vfree, 0), 0))
	 from valuic
		  left join counter c on (counterr = c.counterkey)
	where counterr = @counter_key 
      and checkdate <= @for_date
	  and ischecked <> 0 --and /*KodR=:abonid and -- теперь KodR игнорируем для Один-Счетчик-у-нескольких-Абонентов*/

   set @scurrent = @scurrent + @Values_Sum

 end

INSERT INTO @SelTable  (SCURRENT, SCOUNTERR) VALUES (@scurrent, @scounterr)

RETURN
end



Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719351
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyесть функция она возвращает результат с округлением одним а процедура с другим, данные при этом берутся с одного и того же места, условия идентичны
Нет, условия разные в плане отображения.

Ты в курсе, что у float всего 7 значащих цифр?
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719353
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ну я в процедуре конфертил в флоат, не помогает
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719354
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: kolyady, хорош постить свой код -- он уже есть в спойлерах.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719355
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

ясно, короче не вариант показать
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719356
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyГавриленко Сергей Алексеевич,
ясно, короче не вариант показатьГлазоньки разуйте и посмотрите ваши сообщения с удаленным вложением. На плюсик нажмите.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719357
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вобщем есть какиелибо идеи как привести данные в процедуре к таким же как в функции
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719358
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady,

туплю :) сор
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719361
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результаты каких именно вычислений у вас расходятся? SCURRENT? Так в процедуре туда еще con.initvalue какой-то прибавляется.

В целом, если хотите одинаковый результат при операциях с float-значениями -- оперируйте с ними в одинаковом порядке и объеме.
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719365
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

con.initvalue тут все правильно что в процедуре что в функции,
разница в округлениях.
в процедуре кастил в float, все значения но результат такой же
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719367
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyГавриленко Сергей Алексеевич,

con.initvalue тут все правильно что в процедуре что в функции,
разница в округлениях.
в процедуре кастил в float, все значения но результат такой же
для начала
https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-2017

какое из сложений округляет решаёте сами

ну и требоватьточность от типапо определению не точного это обычное дело
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719375
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

ну неточного это как посмотреть, и функция и процедура возвращает одно и тоже значение, вопрос в том почему они разные?
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719380
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyTaPaK,

ну неточного это как посмотреть, и функция и процедура возвращает одно и тоже значение, вопрос в том почему они разные?
смотреть в определение

Approximate-number data types
...
Рейтинг: 0 / 0
тип значения float функция фозвращает результат отчилчительный от процедуры
    #39719390
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyTaPaK,

ну неточного это как посмотреть, и функция и процедура возвращает одно и тоже значение, вопрос в том почему они разные?Они разные, потому что вы суммируете float-значения в разном порядке. В этом случае результат может быть разный.
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / тип значения float функция фозвращает результат отчилчительный от процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]