Функция Round

Обсуждение Stimulsoft Reports.NET
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Функция Round

Сообщение Aleksey »

Здравствуйте,

Точных время сказать не можем.

Вопрос по теме отрицательных нулей доработан.

Спасибо.
vea
Сообщения: 21
Зарегистрирован: 01 июл 2024, 11:47

Re: Функция Round

Сообщение vea »

Здравствуйте. Прошло уже порядком времени с момента вашего ответа. Скажите, есть ли какая-то информация по вопросу?
Сколько бы мы не возвращались к этой теме - что-то все равно не сходится.
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Функция Round

Сообщение Aleksey »

Здравствуйте,

Занимаемся данной проблемой, о результатах дадим знать.

Спасибо.
#14894
vea
Сообщения: 21
Зарегистрирован: 01 июл 2024, 11:47

Re: Функция Round

Сообщение vea »

Здравствуйте. Прошло уже 37 дней (последний вопрос был задан ещё 25.06), вы можете дать хотя бы общую информацию: вы подтверждаете наличие проблемы? в чем именно она заключается? может быть мы можем что-то сделать со своей стороны?
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Функция Round

Сообщение Aleksey »

Здравствуйте,

Обсуждаемая тут тема - это не ошибка продукта, а особенности реализации математических операций в разных системах.

Мы внимательно перечитали нашу переписку, проанализировали ваш пример отчета, и хотим уточнить вам следующие нюансы.

1. Опция "StiOptions.Engine.MidpointRounding" влияет ТОЛЬКО на НАШУ функцию Round. Эта опция никак не влияет на системную функцию Math.Round или на форматирование чисел, которое производится тоже системными средствами. В вашем примере отчета используется только Math.Round, поэтому использование этой опции в данном отчете ни на что не влияет.

2. Разница вычислений в Net и NetFramework. В NetCore начиная с версии NetCore3.0 были сделаны изменения, чтобы вычисления соответствовали стандарту "IEEE 754-2008". Соответственно результаты вычислений могут отличаться. Подробно изменения описаны в следующей статье:
https://devblogs.microsoft.com/dotnet/f ... -core-3-0/
Благодаря этому же стандарту в вычислениях появился и "отрицательный ноль", когда в результате операции Math.Round(-0.01, 0) получается не просто "0", а именно "-0".

Чтобы результаты вычислений были везде одинаковыми и прогнозируемыми, используйте способ, который мы приводили вам выше - установите значение опции и используйте нашу функцию Round с приведением типа к Decimal, например:
Round((decimal)(ваше_выражение) ,2)

Спасибо.
vea
Сообщения: 21
Зарегистрирован: 01 июл 2024, 11:47

Re: Функция Round

Сообщение vea »

Здравствуйте. Благодарю за ответ, в течении следующей недели мы протестируем работу такого подхода и отпишемся о результатах
vea
Сообщения: 21
Зарегистрирован: 01 июл 2024, 11:47

Re: Функция Round

Сообщение vea »

Здравствуйте. Протестировали ваш вариант, он работает корректно и выводит ожидаемое значение в ячейку. Однако за ним следует один момент - при выгрузке отчета в ексель туда попадает не полное значение, а уже округленное, что для нас неприемлемо. Однако можно исправить это, указав отдельно в Excel.Value сырое значение. В таком случае проблема заключается в количестве отчетов, которые нужно переписать.
Скажите, нельзя ли создать опцию StiOptions.Engine, в которой можно будет переопределить округление по умолчанию, которое применяется при указании формата ячейки (в частности интересует числовой формат, 2-3 знака после запятой)?
Такой подход сократил бы количество переписываемого кода до одной строчки, при этом все останется валидно. Либо, как вариант, можно сразу прописать в округление при форматировании ячейки - ваш метод Round, вместо Math.Round который там применяется сейчас.
Вложения
Как видно, новый способ отработал как и ожидалось, однако тут же видно, что при обычном числовом формате - округление кривое
Как видно, новый способ отработал как и ожидалось, однако тут же видно, что при обычном числовом формате - округление кривое
Снимок экрана 2024-08-05 110733.png (41.39 КБ) 4361 просмотр
Max Shamanov
Сообщения: 78
Зарегистрирован: 07 сен 2021, 13:18

Re: Функция Round

Сообщение Max Shamanov »

Здравствуйте,

Мы приносим извинения за задержку, но нам нужно дополнительное время, чтобы тщательно изучить проблему.
Мы проинформируем вас о результатах как можно скорее.

Благодарим вас за терпение.
vea
Сообщения: 21
Зарегистрирован: 01 июл 2024, 11:47

Re: Функция Round

Сообщение vea »

Здравствуйте. У вас какие-то проблемы по этому вопросу? У меня складывается впечатление что вы отвечаете мне только в случае если я вам пишу. Могу я чем то поспособствовать вашим ответам?
Max Shamanov
Сообщения: 78
Зарегистрирован: 07 сен 2021, 13:18

Re: Функция Round

Сообщение Max Shamanov »

Здравствуйте,
Здравствуйте. Протестировали ваш вариант, он работает корректно и выводит ожидаемое значение в ячейку.
Однако за ним следует один момент - при выгрузке отчета в ексель туда попадает не полное значение, а уже округленное, что для нас неприемлемо.
Однако можно исправить это, указав отдельно в Excel.Value сырое значение.
Так и задумано. По умолчанию в экспорте должно быть то же что и в превью. Если надо более точное - указываете в ExcelValue.
В таком случае проблема заключается в количестве отчетов, которые нужно переписать.
Скажите, нельзя ли создать опцию StiOptions.Engine, в которой можно будет переопределить округление по умолчанию,
которое применяется при указании формата ячейки (в частности интересует числовой формат, 2-3 знака после запятой)?
Не совсем понятен вопрос.
Имеется в виду, когда для ячейки выбираете TextFormat -> Number, и там количество знаков после запятой автоматически ставилось определённое?

Такой подход сократил бы количество переписываемого кода до одной строчки, при этом все останется валидно.
Либо, как вариант, можно сразу прописать в округление при форматировании ячейки - ваш метод Round, вместо Math.Round который там применяется сейчас.
Технически там не применяется округление явно, там вызывается метод value.ToString(format), внутри которого уже сама система применяет округление при необходимости в зависимости от формата.

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