Страница 2 из 2

Re: Функция Round

Добавлено: 28 мар 2023, 11:14
GerBert
Aleksey писал(а): 27 мар 2023, 21:45 Здравствуйте,

Используйте следующее выражение:
{Round(20.275m,2)}

Спасибо.
Добрый день.
В этом случае округление идёт до ближайшего чётного, т.е. 20.275 округлится до 20.28, а вот 20.665 округлится опять в меньшую сторону до 20.66
А если ещё внутри Round использовать не число, а выражение, SumIf например, то при использовании m будет синтаксическая ошибка.

Re: Функция Round

Добавлено: 31 мар 2023, 18:40
Aleksey
Здравствуйте,

Round(20.665m,2) округляется до 20.67, а вот Round(20.665,2) округляется до 20.66.

Главная причина проблемы - это недостаточная точность типов Double и Float.
вместо числа 20.665 на самом деле может храниться что-то типа 20.664999999999998
соответственно и округление не срабатывает правильно.
проблема описана например тут:
https://stackoverflow.com/questions/432 ... zero-81-72
а также тут (в разделе "Округление и точность"):
https://learn.microsoft.com/ru-ru/dotne ... em_Double_

> А если ещё внутри Round использовать не число, а выражение, SumIf например, то при использовании m будет синтаксическая ошибка.

m - это постфикс только для чисел.
для выражений надо использовать приведение типов, например:
Round((decimal)SumIf(...),2)

Спасибо.