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

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

Добавлено: 20 июн 2024, 08:17
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

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

Добавлено: 20 июн 2024, 13:36
Aleksey
Здравствуйте,

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

Спасибо.
#14711

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

Добавлено: 20 июн 2024, 13:53
molochnii
Хорошо, ждем)
Может быть вам поможет - я думаю, что наиболее практичным вариантом будет добавление настройки в StiOptions.Engine. Возможно, кроме bool настройки отключения вывода -0 - стоит добавить возможность указывать там свой формат, по типу "0,000", для того что бы была возможность гибко настраивать форматы сразу во всем отчете.

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

Добавлено: 20 июн 2024, 17:15
Aleksey
Здравствуйте,

Спасибо за предложение.

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

Добавлено: 24 июн 2024, 09:40
molochnii
Здравствуйте :) , подскажите по срокам ответа - несколько дней, неделя, месяц..? :ugeek:

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

Добавлено: 24 июн 2024, 21:55
Aleksey
Здравствуйте,

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

Спасибо.

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

Добавлено: 02 июл 2024, 10:09
Aleksey
Здравствуйте,

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

Спасибо.

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

Добавлено: 11 июл 2024, 11:56
molochnii
Здравствуйте :D
Настройка StiOptions.Engine.AllowNegativeZero работает, спасибо 8-)
Однако нашли не критичную багу: если в ячейке указать значение {Math.Round(-0.0000001, 3)} и формат ячейки "Стандарт" (он же Общий), то при выводе получится значение "-0" (чисто логически это правильное поведение, но пользователи явно этого не поймут). Однако мы используем формат "Числовой" и он работает как и ожидается

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

Добавлено: 16 июл 2024, 01:03
Aleksey
Здравствуйте,

Спасибо за дополнительную информацию.

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

Добавлено: 19 июл 2024, 17:24
Aleksey
Здравствуйте,

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

Спасибо.