Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Изменение поведения функции round()
|
|||
|---|---|---|---|
|
#18+
Неожиданно для себя обнаружил, что при изменении compatibility level базы данных с 2014 на 2016 изменилось поведение round, а так же и конвертации типов float -> decimal На уровне совместимости 2014 select round(cast(0.41595 as float), 4) возвращал значение 0.416 После подъема уровня совместимости на 2016 возвращается 0.4159 Прогнал числа из теста, описанного в документации по .NET по методу Math.Round, иллюстрирующего "бухгалтерское округление". Нет, вроде не это. P.S. Да, я знаю, что "не надо так делать", но так сложилось, что есть взаимодействие с базой, где количества хранятся во float. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 08:36 |
|
||
|
Изменение поведения функции round()
|
|||
|---|---|---|---|
|
#18+
Да не делает сервер это округление сам - оно ему надо? он обращается к какой-то библиотеке (С++ runtime), которая сделает ему округление - а вот она-то как раз и поменялась... Если Вы хотите получить округление, которое не зависит от погоды на Марсе - реализуйте его "вручную". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 08:41 |
|
||
|
Изменение поведения функции round()
|
|||
|---|---|---|---|
|
#18+
Я хочу, чтобы изменения в поведении функций документировались. Тем более, что речь идёт об одном и том же сервере и одной и той же БД, у которой можно опцию compatibility level попереключать туда-сюда. Эта конвертация не поменяла своего поведения даже при переходе с реального сервера SQL 2000 на реальный сервер SQL 2005. Это называется "обратная совместимость". А тут вдруг просто при смене compatibility level 2014-2016 в рамках одного и того же 2016 сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 08:50 |
|
||
|
Изменение поведения функции round()
|
|||
|---|---|---|---|
|
#18+
rozenЯ хочу, чтобы изменения в поведении функций документировались.Это - к разработчику. Сейчас поведение функции ROUND() в части используемого типа округления в принципе не документировано. Так что реализацию стабильности типа округления и риски от его изменения в стандартной реализации они спихнули на конечного пользователя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 08:56 |
|
||
|
Изменение поведения функции round()
|
|||
|---|---|---|---|
|
#18+
rozenЯ хочу, чтобы изменения в поведении функций документировались. Тем более, что речь идёт об одном и том же сервере и одной и той же БД, у которой можно опцию compatibility level попереключать туда-сюда. Эта конвертация не поменяла своего поведения даже при переходе с реального сервера SQL 2000 на реальный сервер SQL 2005. Это называется "обратная совместимость". А тут вдруг просто при смене compatibility level 2014-2016 в рамках одного и того же 2016 сервера. у какой. вот всё тебе описано https://docs.microsoft.com/en-us/sql/t-sql/data-types/float-and-real-transact-sql?view=sql-server-2017 авторApproximate-number data types for use with floating point numeric data. Floating point data is approximate; therefore, not all values in the data type range can be represented exactly. The ISO synonym for real is float(24). https://technet.microsoft.com/en-us/library/dd424925.aspx авторNote that the decimal and numeric data types are exactly equivalent to each other. Both data types are kept in the product for backwards compatibility. Either data type can be used when you need to store exact numeric data with decimal places, however, it is recommended that you choose either decimal or numeric for use throughout your organization for consistency. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 09:04 |
|
||
|
Изменение поведения функции round()
|
|||
|---|---|---|---|
|
#18+
rozenЯ хочу, чтобы изменения в поведении функций документировались. Тем более, что речь идёт об одном и том же сервере и одной и той же БД, у которой можно опцию compatibility level попереключать туда-сюда. Эта конвертация не поменяла своего поведения даже при переходе с реального сервера SQL 2000 на реальный сервер SQL 2005. Это называется "обратная совместимость". А тут вдруг просто при смене compatibility level 2014-2016 в рамках одного и того же 2016 сервера. Хорошо бы увидеть cast( ваше_поле as varbinary(16) ) для этих двух случаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 09:52 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39649148&tid=1689669]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 399ms |

| 0 / 0 |
