Функция Round

Обсуждение Stimulsoft Reports.NET
GerBert
Сообщения: 2
Зарегистрирован: 24 мар 2023, 14:53

Re: Функция Round

Сообщение GerBert »

Aleksey писал(а): 27 мар 2023, 21:45 Здравствуйте,

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

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

Re: Функция Round

Сообщение 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)

Спасибо.
Ответить