Отрицательный ноль .net

Обсуждение Stimulsoft Reports.NET
Ответить
Аватара пользователя
molochnii
Сообщения: 56
Зарегистрирован: 29 июл 2021, 14:43

Отрицательный ноль .net

Сообщение molochnii »

Доброго времени суток. :D При переходе с net framework на net мы столкнулись с отрицательным нулем в дробных значениях, обычно, они появляются в ситуации, когда примерно такое число -0.000003 округляется до 3х знаков, и получается -0.000 (есть и другие варианты как получить -0, но именно приведенный пример актуален для нас). В процессе выяснилось, что это связано с использованием в .net Core 3.0 и выше нового стандарта IEEE 754, который, в общем и целом, гласит что double должен соблюдать принцип "туда и обратно" ;) . Более того - оказывается, что "проблема" только лишь в выводе, и если изменить шаблон вывода для дробного числа, то -0 будет выводиться как 0. :roll:

:!: Итак проблема заключается в том, что для всего разнообразия отчетов, которые у нас есть - будет весьма проблематично добавлять в них логику по изменению формата вывода, есть ли у вас варианты, как мы можем, например, поменять какую-нибудь настройку StiOptions в отчете, и что бы шаблон вывода у нас автоматически применился на весь отчет? :(

Мы используем как дизайнер отчетов для их построения, так и Nuget Stimulsoft.Reports.Engine.NetCore 2024.3.1 для отрисовки отчетов. Сам проект использует платформу .Net 6.0, и работает на linux, хотя проблема повторяется и на windows.

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

P.S.
Что бы повторить проблему нужно всего-навсего использовать .net, простой пример показан на скрине :arrow: в C# Interactive версии 4.9.0-1.23560.3
Вложения
https://ru.stackoverflow.com/questions/139495/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%BD%D0%B5%D1%82-%D0%B1%D0%B5%D0%B7%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-double
https://ru.stackoverflow.com/questions/139495/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%BD%D0%B5%D1%82-%D0%B1%D0%B5%D0%B7%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-double
image_2024-06-18_17-59-05.png (135.73 КБ) 6151 просмотр
Снимок экрана 2024-06-20 101912.png
Снимок экрана 2024-06-20 101912.png (34.57 КБ) 6152 просмотра
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Отрицательный ноль .net

Сообщение Aleksey »

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

Нужно время для анализа, решения проблемы. О результатах дадим знать.

Спасибо.
#14711
Аватара пользователя
molochnii
Сообщения: 56
Зарегистрирован: 29 июл 2021, 14:43

Re: Отрицательный ноль .net

Сообщение molochnii »

Хорошо, ждем)
Может быть вам поможет - я думаю, что наиболее практичным вариантом будет добавление настройки в StiOptions.Engine. Возможно, кроме bool настройки отключения вывода -0 - стоит добавить возможность указывать там свой формат, по типу "0,000", для того что бы была возможность гибко настраивать форматы сразу во всем отчете.
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Отрицательный ноль .net

Сообщение Aleksey »

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

Спасибо за предложение.
Аватара пользователя
molochnii
Сообщения: 56
Зарегистрирован: 29 июл 2021, 14:43

Re: Отрицательный ноль .net

Сообщение molochnii »

Здравствуйте :) , подскажите по срокам ответа - несколько дней, неделя, месяц..? :ugeek:
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Отрицательный ноль .net

Сообщение Aleksey »

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

ТОчных сроков сказать не можем. Постараемся в ближайшее время.

Спасибо.
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Отрицательный ноль .net

Сообщение Aleksey »

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

Сделали доработку в TextFormats: number, currency, percent.
Если свойство StiOptions.Engine.AllowNegativeZero=false (дефолтное значение), то значение "-0" заменяется на "0".

Спасибо.
Аватара пользователя
molochnii
Сообщения: 56
Зарегистрирован: 29 июл 2021, 14:43

Re: Отрицательный ноль .net

Сообщение molochnii »

Здравствуйте :D
Настройка StiOptions.Engine.AllowNegativeZero работает, спасибо 8-)
Однако нашли не критичную багу: если в ячейке указать значение {Math.Round(-0.0000001, 3)} и формат ячейки "Стандарт" (он же Общий), то при выводе получится значение "-0" (чисто логически это правильное поведение, но пользователи явно этого не поймут). Однако мы используем формат "Числовой" и он работает как и ожидается
Вложения
Без имени.png
Без имени.png (7.78 КБ) 5888 просмотров
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Отрицательный ноль .net

Сообщение Aleksey »

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

Спасибо за дополнительную информацию.
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Отрицательный ноль .net

Сообщение Aleksey »

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

Сделали некоторые доработки, проверьте следующий билд.

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