Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Для записи числа в таблицу _table в поле _field из переменной (@_var) происходит неправильное округление: insert into _table (_field ) values (round(@_var,2)) В целом работает правильно, но вот в одной записи на копейку значение уменьшается ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 04:02 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
так не бывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 06:30 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Какие типы у данного поля и переменной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 07:18 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
SergSuper - Я тоже думал что не бывает. Однако... GreenSunrise - У переменной тип - real - У поля пробовал float и money все едино В переменную заносятся данные из поля типа float ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 07:44 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Это ваша ошибка, т.к. BOL "float and real Approximate number data types for use with floating point numeric data. Floating point data is approximate; not all values in the data type range can be precisely represented. " Нужно использовать decimal, numeric ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 07:49 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
2 Andronick Может Вы примерчик то потрудились бы привесть? Почему я должен Вам на слово верить, а Вы мне нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 10:11 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Все бы здорово, но с переменными типа decimal, numeric значения полей в таблице округляются до целого Хотя может я чего то и не догнал? Выход я всетаки нашел вместо переменных использовал просто update, все нормально! Всем спасибо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 10:20 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
но с переменными типа decimal, numeric значения полей в таблице округляются до целого Теперь я вас не понимаю declare @x decimal(10) declare @y decimal(10,3) declare @z decimal(10,6) set @x = 1/6.00 set @y = 1/6.00 set @z = 1/6.00 select @x, @y, @z, round(@y, 2), round(@z, 3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 10:29 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Это ж как надо надругаться над таблицей, чтоб в decimal и numeric числа САМИ СОБОЙ округлялись... >вместо переменных использовал просто update ымгм. прямо и сказать-то нечего SergSuper, Вы не в духе? Обычно Ваше появление на форуме приносит ценную и эмоционально нейтральную информацию. Сегодня что-то не так. Улыбнитесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 10:32 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Glory - спасибо я поял! GreenSunrise - чем плох вариант с update, помоему даже шустрее (хотя для очень больших таблиц...?) SergSuper - Примерчик (обычный курсорчик): Declare @sum_uslug real, @shifr Int, sf_id Int declare scan scroll cursor for select sum_uslug, shifr from table1… open scan fetch first from scan into @sum_uslug, @shifr while (@@fetch_status = 0) begin -- update itog @sf_id -- генерится -- Вариант вставки с UPDATE insert into table2 (sf_id, shifr) values (@sf_id, @shifr) update t set sum_uslug=f.sum_uslug from table2 t join table1 f on (t.shifr = f.shifr) where t.sf_id=@sf_id -- Вставка через переменные неверное округление с типом REAL (sum_uslug) --insert into table2 (sf_id , shifr , sum_uslug) --values (@sf_id , @shifr , round(@sum_uslug,2) ) fetch next from scan into @sum_uslug, @shifr end close scan deallocate scan ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 11:32 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Если генерация sf_id укладывается в функцию, то весь этот огород с курсорами, инсертами и апдейтами можно заменить 2-мя строчками: insert into table2 (sf_id, shifr, sum_uslug) select gen_sf_id(), shifr, sum_uslug from table1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 12:10 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
GreenSunrise - Я делаю генерацию внутри курсора select @sf_id = max(sf_id)+1 from table2 не совсем понял, что значит > Если генерация sf_id укладывается в функцию И как я вставлю её в этот запрос ??? > insert into table2 (sf_id, shifr, sum_uslug) > select gen_sf_id(), shifr, sum_uslug from table1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 12:19 |
|
||
|
Некорректное округление
|
|||
|---|---|---|---|
|
#18+
Если забыть о деталях генерации (вы же не сразу написали, в чем состоит генерация sf_id), то принцип до безобразия прост: создаем функцию, обзывая ее, к примеру, gen_sf_id() create function gen_sf_id() returns int as begin -- generate some value with some rules return (select max(sf_id) + 1 from table2) end а потом вся вставка НАБОРА значений из одной таблицы в другую делается ОДНИМ оператором: insert into table2 (sf_id, shifr, sum_uslug) select gen_sf_id(), shifr, sum_uslug from table1 Эта штука заменяет весь цикл по курсору. ---------------------------------------- Теперь. Если все-таки обратить внимание, на то, что вы делаете ПО СМЫСЛУ, то все это бодяга здорово настораживает. Почему не использовать identity? Зачем эти самоделки насчет max(sf_id) + 1? А вы продумали работу системы при множестве пользователей? Нет. Вам не пришло в голову, что между запросом максимального значения и вставкой его плюс 1 в другую таблицу есть разница во времени? Если в этот промежуток другой пользователь выполнит этот код, то будет вставка ДВУХ строк с одним и тем же sf_id. Да и при увеличении таблицы поиск максимального значения будет все более и более накладной операцией. Нужны еще доводы или этих хватит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 13:31 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3496&tid=1823561]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 357ms |

| 0 / 0 |
