Отрицательный ноль .net
Отрицательный ноль .net
Доброго времени суток. При переходе с net framework на net мы столкнулись с отрицательным нулем в дробных значениях, обычно, они появляются в ситуации, когда примерно такое число -0.000003 округляется до 3х знаков, и получается -0.000 (есть и другие варианты как получить -0, но именно приведенный пример актуален для нас). В процессе выяснилось, что это связано с использованием в .net Core 3.0 и выше нового стандарта IEEE 754, который, в общем и целом, гласит что double должен соблюдать принцип "туда и обратно" . Более того - оказывается, что "проблема" только лишь в выводе, и если изменить шаблон вывода для дробного числа, то -0 будет выводиться как 0.
Итак проблема заключается в том, что для всего разнообразия отчетов, которые у нас есть - будет весьма проблематично добавлять в них логику по изменению формата вывода, есть ли у вас варианты, как мы можем, например, поменять какую-нибудь настройку StiOptions в отчете, и что бы шаблон вывода у нас автоматически применился на весь отчет?
Мы используем как дизайнер отчетов для их построения, так и Nuget Stimulsoft.Reports.Engine.NetCore 2024.3.1 для отрисовки отчетов. Сам проект использует платформу .Net 6.0, и работает на linux, хотя проблема повторяется и на windows.
На текущий момент у нас есть только одно наиболее адекватное решение - в каждый проект добавлять метод, с помощью которого мы будем выводить значения из ячейки, следовательно и вызов этого метода нужно будет поместить в каждую ячейку. Что даже для одного отчета может быть не простой задачей..
P.S.
Что бы повторить проблему нужно всего-навсего использовать .net, простой пример показан на скрине в C# Interactive версии 4.9.0-1.23560.3
Итак проблема заключается в том, что для всего разнообразия отчетов, которые у нас есть - будет весьма проблематично добавлять в них логику по изменению формата вывода, есть ли у вас варианты, как мы можем, например, поменять какую-нибудь настройку StiOptions в отчете, и что бы шаблон вывода у нас автоматически применился на весь отчет?
Мы используем как дизайнер отчетов для их построения, так и Nuget Stimulsoft.Reports.Engine.NetCore 2024.3.1 для отрисовки отчетов. Сам проект использует платформу .Net 6.0, и работает на linux, хотя проблема повторяется и на windows.
На текущий момент у нас есть только одно наиболее адекватное решение - в каждый проект добавлять метод, с помощью которого мы будем выводить значения из ячейки, следовательно и вызов этого метода нужно будет поместить в каждую ячейку. Что даже для одного отчета может быть не простой задачей..
P.S.
Что бы повторить проблему нужно всего-навсего использовать .net, простой пример показан на скрине в 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
- image_2024-06-18_17-59-05.png (135.73 КБ) 6589 просмотров
-
- Снимок экрана 2024-06-20 101912.png (34.57 КБ) 6590 просмотров
Re: Отрицательный ноль .net
Здравствуйте,
Нужно время для анализа, решения проблемы. О результатах дадим знать.
Спасибо.
#14711
Нужно время для анализа, решения проблемы. О результатах дадим знать.
Спасибо.
#14711
Re: Отрицательный ноль .net
Хорошо, ждем)
Может быть вам поможет - я думаю, что наиболее практичным вариантом будет добавление настройки в StiOptions.Engine. Возможно, кроме bool настройки отключения вывода -0 - стоит добавить возможность указывать там свой формат, по типу "0,000", для того что бы была возможность гибко настраивать форматы сразу во всем отчете.
Может быть вам поможет - я думаю, что наиболее практичным вариантом будет добавление настройки в StiOptions.Engine. Возможно, кроме bool настройки отключения вывода -0 - стоит добавить возможность указывать там свой формат, по типу "0,000", для того что бы была возможность гибко настраивать форматы сразу во всем отчете.
Re: Отрицательный ноль .net
Здравствуйте,
Спасибо за предложение.
Спасибо за предложение.
Re: Отрицательный ноль .net
Здравствуйте , подскажите по срокам ответа - несколько дней, неделя, месяц..?
Re: Отрицательный ноль .net
Здравствуйте,
ТОчных сроков сказать не можем. Постараемся в ближайшее время.
Спасибо.
ТОчных сроков сказать не можем. Постараемся в ближайшее время.
Спасибо.
Re: Отрицательный ноль .net
Здравствуйте,
Сделали доработку в TextFormats: number, currency, percent.
Если свойство StiOptions.Engine.AllowNegativeZero=false (дефолтное значение), то значение "-0" заменяется на "0".
Спасибо.
Сделали доработку в TextFormats: number, currency, percent.
Если свойство StiOptions.Engine.AllowNegativeZero=false (дефолтное значение), то значение "-0" заменяется на "0".
Спасибо.
Re: Отрицательный ноль .net
Здравствуйте
Настройка StiOptions.Engine.AllowNegativeZero работает, спасибо
Однако нашли не критичную багу: если в ячейке указать значение {Math.Round(-0.0000001, 3)} и формат ячейки "Стандарт" (он же Общий), то при выводе получится значение "-0" (чисто логически это правильное поведение, но пользователи явно этого не поймут). Однако мы используем формат "Числовой" и он работает как и ожидается
Настройка StiOptions.Engine.AllowNegativeZero работает, спасибо
Однако нашли не критичную багу: если в ячейке указать значение {Math.Round(-0.0000001, 3)} и формат ячейки "Стандарт" (он же Общий), то при выводе получится значение "-0" (чисто логически это правильное поведение, но пользователи явно этого не поймут). Однако мы используем формат "Числовой" и он работает как и ожидается
- Вложения
-
- Без имени.png (7.78 КБ) 6326 просмотров
Re: Отрицательный ноль .net
Здравствуйте,
Спасибо за дополнительную информацию.
Спасибо за дополнительную информацию.
Re: Отрицательный ноль .net
Здравствуйте,
Сделали некоторые доработки, проверьте следующий билд.
Спасибо.
Сделали некоторые доработки, проверьте следующий билд.
Спасибо.