powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport использует в форматировании банковское округление
25 сообщений из 27, страница 1 из 2
FastReport использует в форматировании банковское округление
    #39630038
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был удивлен, когда по результатам отчетов не сходились копейки, и, проведя эксперимент, получилось, что FastReport использует в форматировании банковское округление.
Значение 39,065 превращается в 39,06 при форматировании вида %2.2f.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630110
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

Просто ты почему-то решил, что в исходных числах ("до округления") всего 4 знака после десятичной точки.
А там - не 4 ;).
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630138
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДsvnvlad,

Просто ты почему-то решил, что в исходных числах ("до округления") всего 4 знака после десятичной точки.
А там - не 4 ;).
Там 4.
Код: pascal
1.
BANK_ROUND(iwn.sum_rub_with_nds, 4) AS sum_rub_with_nds, 
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630139
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот то же самое число без округлений и форматирования: 815039,06501
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630140
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BANK_ROUND здесь - хранимая функция. Не смущайтесь, можно ее заменить на ROUND, суть не в этом. А то, что там на входе отчета 4 знака.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630141
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

провел эксперимент:
Код: pascal
1.
2.
  'SELECT ... '#13#10 +
  '1.55 AS test1, 1.65 AS test2, '#13#10 +


Без форматирования отчет выводит эти же цифры 1.55 и 1.65.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630142
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затем задаю формат вывода с 1 знаком после запятой:
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630143
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вуаля!
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630144
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Вуаля", ага.

Глупыш, дробные десятичные числа нельзя точно представить в двоичной форме.
И что там выводится - дело второе, главное - что там хранится.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630150
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котовасиядробные десятичные числа нельзя точно представить в двоичной форме.
И что там выводится - дело второе, главное - что там хранится.
Так устроит?
Код: pascal
1.
2.
SELECT
CAST(1.55 AS DECIMAL(10,4)) AS test1, CAST(1.65 AS DECIMAL(10,4)) AS test2 


А результат одинаковый: 1,6
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630151
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к слову, в базе у меня все поля с дробной частью - такого типа: DECIMAL(11, 5)
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630154
_DenZ__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svnvlad,

В чем смысл округлять внутри хранимой процедуры, если в итоге поле Double типа ?
Такое число в любом случае будет представлять приближение исходного числа в вещественном типе. Для Double - 815039,06501 будет что-то вроде 815039,06499999999.
Если поле округляется до 4х знаков запросом , то лучше будет использовать BCD.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630155
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и какая разница, если два способа, примененные к одному и тому же числу, выдают разный результат?
1. Если округлять в SQL-запросе:
Код: sql
1.
2.
SELECT
ROUND(1.65, 1) AS round_test2


Выдает 1,7.

2. Если округлять
Код: sql
1.
SELECT 1.65

в FastReport-е, назначая формат %2.1f, получается 1,6.

Фаст репорт округляет по-банковски.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630156
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по факту FR все четные 5 округляет в меньшую сторону, нечетные - в большую.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630157
_DenZ__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svnvlad,

По факту, FR ничего не округляет, метод округления зависит от типа и установленного флага.

Код: pascal
1.
2.
3.
4.
5.
6.
var
  d: Double;
begin
 d := 815039.0650;
 ShowMessage(Format('%2.2f',[d]));
end;
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630159
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_DenZ__svnvlad,

По факту, FR ничего не округляет, метод округления зависит от типа и установленного флага.

Код: pascal
1.
2.
3.
4.
5.
6.
var
  d: Double;
begin
 d := 815039.0650;
 ShowMessage(Format('%2.2f',[d]));
end;


fixed-формат делает банковское округление?
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630194
_DenZ__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svnvlad,

Какого типа TField у TDataSet ?
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630206
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_DenZ__... в итоге поле Double типа ?
Такое число в любом случае будет представлять приближение исходного числа в вещественном типе. Для Double - 815039,06501 будет что-то вроде 815039,06499999999...
+1.
BCD, или Сurrency.

Однако, тут дело бесполезное, человек про внутреннее представление знать не желает, хотя его уже трижды в одно место носом ткнули.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630241
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД_DenZ__... в итоге поле Double типа ?
Такое число в любом случае будет представлять приближение исходного числа в вещественном типе. Для Double - 815039,06501 будет что-то вроде 815039,06499999999...
+1.
BCD, или Сurrency.

Однако, тут дело бесполезное, человек про внутреннее представление знать не желает, хотя его уже трижды в одно место носом ткнули.
Все так, внутреннее представление и т.д. Но на практике все работает так, как будто это четкое банковское округление. В итоге нужны практические последствия, внутреннее представление заказчика не интересует. Неужели это не повод уделить внимание такому феномену, чем его не глядя отметать, т.к. в теории это "не работает"?
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630242
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_DenZ__svnvlad,

Какого типа TField у TDataSet ?
Неизвестно. Типы полям не назначал, просто подключаю TADQuery к TDataSource и frxDBDataset и frxReport.
Само поле DECIMAL.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630271
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

TUniQuery (select 1.65 as uttt) к TDataSource к frxDBDataset и frxReport (DisplayFormat(FormatStr='%2.1f', Kibnd=fkNumeric)) = 1.7

Ты у себя эитими не баловался: Set8087CW и Math.SetRoundMode?
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630334
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitri Krizhanovski, нет.
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630367
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще не понимаю что мешает отправить в отчет уже подготовленные данные, в том виде в котором они должны быть отображены?
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630422
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FastReport использует функцию Format().
У тебя претензии к Fastу, к Функции или к жизни ???
...
Рейтинг: 0 / 0
FastReport использует в форматировании банковское округление
    #39630599
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас использует, потом не будет.
имхо проще подготовить все данные и отдать их генератору отчета уже только для построения. Таким образом в отчете будут ровно те данные которые ты подготовил. Конечно могут возникать задачи при которых требуется обработка данных самим отчетом, но это явно не тот случай.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport использует в форматировании банковское округление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]