powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / округление Round
25 сообщений из 25, страница 1 из 1
округление Round
    #38807924
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!
Тема стара как мир, но все же..
IF NOT (SELECT OBJECT_ID('TEMPDB..#TableTmp')) IS NULL
DROP TABLE #TableTmp

create table #TableTmp ( [t] NUMERIC(16,4) )
insert into #TableTmp
values(314.6346)
select round(t,2) from #TableTmp

Почему не 314.64?
...
Рейтинг: 0 / 0
округление Round
    #38807929
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manПочему не 314.64?
Потому, что на округление до 2го знака влияет 3ий знак, а не 4ый
...
Рейтинг: 0 / 0
округление Round
    #38807932
Фотография Taffy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что NUMERIC(16,4)
и результат 314.64 аналогичен 314.6400

а как показывать пользователю - вопрос не сервера
...
Рейтинг: 0 / 0
округление Round
    #38807936
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так вроде округление справа налево. 6346 -> 635 -> 64

В общем, вопрос решается написанием собственной функции округления?
...
Рейтинг: 0 / 0
округление Round
    #38807937
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manВ общем, вопрос решается написанием собственной функции округления?Ну если вы решили округлять по своим собственным правилам, то да.
...
Рейтинг: 0 / 0
округление Round
    #38807939
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manтак вроде округление справа налево
Это где такое округление ?
...
Рейтинг: 0 / 0
округление Round
    #38807940
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело в том, что пользователи выдают представленное выше округление(справа налево) как математическое
Хотя я придерживаюсь другой точки зрения.
...
Рейтинг: 0 / 0
округление Round
    #38807944
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manчто пользователи выдают представленное выше округление(справа налево) как математическое
Пусть ознакомятся https://ru.wikipedia.org/wiki/Округление
...
Рейтинг: 0 / 0
округление Round
    #38807948
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manПочему не 314.64?Потому что 314.6300 ближе к округляемому числу (-0.0046), чем 314.6400 (+0.0054).
В последних версиях можно округлять с третьим параметром <>0.
Тогда будет просто отбрасывать "лишние разряды"
Код: sql
1.
SELECT ROUND(t,2,1)
...
Рейтинг: 0 / 0
округление Round
    #38807992
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_man,

http://msdn.microsoft.com/ru-ru/library/ms175003(v=sql.105).aspx

там и вариант с усечением упомянут
...
Рейтинг: 0 / 0
округление Round
    #38808416
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

авторВ последних версиях можно округлять с третьим параметром <>0.
Тогда будет просто отбрасывать "лишние разряды"

мне вот как раз наоборот, надо учитывать..
так и придется что-то свое сочинять((
...
Рейтинг: 0 / 0
округление Round
    #38808445
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manтак вроде округление справа налево. 6346 -> 635 -> 64

В общем, вопрос решается написанием собственной функции округления?

Это Вы сами придумали такой способ округления :)
На самом деле надо сравнивать остаток после знака, но которого хотите округлить. Остаток 46 в данном случае, он меньше 50, значит отбрасывается.
...
Рейтинг: 0 / 0
округление Round
    #38808447
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_maniap,

авторВ последних версиях можно округлять с третьим параметром <>0.
Тогда будет просто отбрасывать "лишние разряды"

мне вот как раз наоборот, надо учитывать..
так и придется что-то свое сочинять((Как учитывать-то?
Существует много способов округления: к ближайшему числу, "вниз", "вверх", "банковское округление", наконец!
Из них Microsoft реализовал только два!
...
Рейтинг: 0 / 0
округление Round
    #38808451
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_man,

PS Вы хотите своим способом как раз накопить ошибку округления. Эта ошибка и дает лишнюю 1.
...
Рейтинг: 0 / 0
округление Round
    #38809050
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
я как математик как раз и не понимаю это бухгалтерское округление, если в ндс 4 знака после запятой, то надо учитывать все 4, а не отбрасывать
...
Рейтинг: 0 / 0
округление Round
    #38809056
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

оказывается, никакой способ не округляет как в данном случае, т.е. справа налево, ни округление вверх, ни вниз ,ни случайное, ни банковское, ни чередующееся.
...
Рейтинг: 0 / 0
округление Round
    #38809237
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
last_manтак вроде округление справа налево. 6346 -> 635 -> 64
В общем, вопрос решается написанием собственной функции округления?
в таком случае вас спасет двойной ROUND:

Код: sql
1.
2.
3.
4.
5.
declare @r numeric(16,4) = 314.6346;
select ROUND(ROUND(@r, 3), 2), 
       CAST(ROUND(ROUND(@r, 3), 2) as decimal(16,2))
----
314.6400	314.64
...
Рейтинг: 0 / 0
округление Round
    #38809245
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manВладислав Колосов,
я как математик как раз и не понимаю это бухгалтерское округление, если в ндс 4 знака после запятой, то надо учитывать все 4, а не отбрасывать

Раз вы математик, до должны понимать, как правильно оценить остаток без накопления ошибки :)
...
Рейтинг: 0 / 0
округление Round
    #38809253
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
Владислав Колосовlast_manВладислав Колосов,
я как математик как раз и не понимаю это бухгалтерское округление, если в ндс 4 знака после запятой, то надо учитывать все 4, а не отбрасывать

Раз вы математик, до должны понимать, как правильно оценить остаток без накопления ошибки :)
вы это его пользователям объясните, ТС под их мнением не подписывался.
last_manдело в том, что пользователи выдают представленное выше округление(справа налево) как математическое
Хотя я придерживаюсь другой точки зрения.
...
Рейтинг: 0 / 0
округление Round
    #38809263
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manоказывается, никакой способ не округляет как в данном случае, т.е. справа налево, ни округление вверх, ни вниз ,ни случайное, ни банковское, ни чередующееся.
и непонятно зачем кому-то вообще надо было изобретать такой способ округления, какие у него достоинства.
...
Рейтинг: 0 / 0
округление Round
    #38809306
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakilllast_manоказывается, никакой способ не округляет как в данном случае, т.е. справа налево, ни округление вверх, ни вниз ,ни случайное, ни банковское, ни чередующееся.
и непонятно зачем кому-то вообще надо было изобретать такой способ округления, какие у него достоинства.

Полагаю, что это просто заблуждение относительно округления.
...
Рейтинг: 0 / 0
округление Round
    #38809311
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS особенно, если это юристы.
...
Рейтинг: 0 / 0
округление Round
    #38809317
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
Shakilllast_manоказывается, никакой способ не округляет как в данном случае, т.е. справа налево, ни округление вверх, ни вниз ,ни случайное, ни банковское, ни чередующееся.
и непонятно зачем кому-то вообще надо было изобретать такой способ округления, какие у него достоинства.
вот всем не понять, а нам с ТС очень даже.
радуйтесь, что у вас вменяемые пользователи.
я вот товарища по дурдому вижу за версту
ничего вы им не докажете, когда полная невменяемость, это бисер перед свиньями.
...a чтобы понять логику набекрень, надо и мозги иметь свернутые в ту же сторону,
так что лучше и не пытаться
...
Рейтинг: 0 / 0
округление Round
    #38810205
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manтак вроде округление справа налево. 6346 -> 635 -> 64

В общем, вопрос решается написанием собственной функции округления?Следуя этой логике, 314.634444444445 тогда тоже должно округлиться в 314.64, что мягко говоря весьма странно.
...
Рейтинг: 0 / 0
округление Round
    #38864187
VasilB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
o-oShakillпропущено...

и непонятно зачем кому-то вообще надо было изобретать такой способ округления, какие у него достоинства.
вот всем не понять, а нам с ТС очень даже.
радуйтесь, что у вас вменяемые пользователи.
я вот товарища по дурдому вижу за версту
ничего вы им не докажете, когда полная невменяемость, это бисер перед свиньями.
...a чтобы понять логику набекрень, надо и мозги иметь свернутые в ту же сторону,
так что лучше и не пытаться

Стоит попробовать ткнуть пользователя в "ДОКУМЕНТ", а именно: СТАНДАРТ СЭВ СТ СЭВ 543-77 ЧИСЛА Правила записи и округления
(который кстати все еще действующий, хотя принят в 79м году прошлого столетия). Возможно, что официальный документ окажется для них "более авторитетным" нежели просто Ваши утверждения.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / округление Round
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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