Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 19 апр 2024, 22:05

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: 05 ноя 2018, 10:43 
Не в сети

Зарегистрирован: 27 апр 2018, 13:19
Сообщений: 16
unit DBSumLst;
у вас:
TDBSum = class(TCollectionItem)
protected
Value: Currency;
FSumValueAsSum: Currency;
public
SumValue: Currency;

Переменные для суммирования имеют тип данных Currency
Расчет суммы происходит у вас так:
Item.SumValue := Item.SumValue + FieldArr[i].AsFloat;

и что будет если FieldArr[i].AsFloat = 999999999999999

Будет конечно ошибка!!!!!!

Будем исправлять тип данных?!
если нет то что делать?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 ноя 2018, 06:21 
Не в сети

Зарегистрирован: 06 фев 2013, 10:02
Сообщений: 453
svborodin писал(а):
Будем исправлять тип данных?!

Уже отвечали на подобные вопросы. Тип Currency используется, чтобы не было потери точности вычислений.

svborodin писал(а):
если нет то что делать?

Считайте итоги сами и выводите как строку.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 ноя 2018, 07:45 
Не в сети

Зарегистрирован: 27 апр 2018, 13:19
Сообщений: 16
Ребята! ну вы не правы!
Ваш ответ подразумевает посыл на ...
какая может быть потеря точности вычислений если вы используете код:
"CURRENCY":= "CURRENCY" + "Float";

т.е. вы написали библиотеку, которая не может работать с большими числами!
почему данного сообщения нет на вашей стартовой веб странице, с пометкой "ВНИМАНИЕ"!

Почему, если итоговая сумма по колонке превышает размерность типа "CURRENCY", Программа слетает по ошибке!

Вы хоть ошибки такого типа гасите и сумму на пусто сбрасывайте и выводите в ячейке к примеру "ОШИБКА" !!!!!!
и дайте возможность перекрыть данный тип, чтобы каждый раз при переходе на новую версию не исправлять ваш код!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 ноя 2018, 09:15 
Не в сети

Зарегистрирован: 06 фев 2013, 10:02
Сообщений: 453
svborodin, я не являюсь разработчиком библиотеки EhLib. Я Вам ответил на Ваш вопрос, поскольку знаю на него ответ. Я сам задавал такой вопрос разработчику еще в 2012 году. Вот что мне ответили:
Цитата:
Суммирование в DBSumLst работает по технологии - При изменении значения
вычесть старое значения, прибавить новое. С типом Extended такой прием
не срабатывает. Через несколько операций начинает накапливаться ошибка
и в общей сумме появляются маленькие остатки которые портят общую
сумму.

Вы тоже уже спрашивали по этому поводу:
http://forum.ehlib.com/ru/viewtopic.php?f=4&t=2468
Вот еще аналогичная тема:
http://forum.ehlib.com/ru/viewtopic.php?f=4&t=130


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 ноя 2018, 10:32 
Не в сети

Зарегистрирован: 27 апр 2018, 13:19
Сообщений: 16
Жду любой ответ от разработчиков.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 ноя 2018, 10:50 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Есть пробный вариант подсчета сумм на основе типа TBcd (до 64 десятичных знаков).
Если готовы принять участие в тестировании, то напишите на support@ehlib.com

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 ноя 2018, 13:39 
Не в сети

Зарегистрирован: 27 апр 2018, 13:19
Сообщений: 16
Меня не интересует 64 десятичных разряда. Мне достаточно и 3
Проблема когда числа большие! Юзер ошибочно забил в базу данных громадное число (палец залип на кнопке)
и после этого форма стала у всех открываться с ошибками

как с этим можно бороться?

(я у себя просто в ваших исходниках заменил Currency на Float и все заработало)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 ноя 2018, 11:47 
Не в сети

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 241
Откуда: Украина, г. Днепропетровск
svborodin писал(а):
Юзер ошибочно забил в базу данных громадное число (палец залип на кнопке)

А ограничить юзеру количество знаков в числе, например задать MaxLength у Edit ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 июн 2020, 06:35 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
EhLibSupport писал(а):
Есть пробный вариант подсчета сумм на основе типа TBcd (до 64 десятичных знаков).

Добрый
Увидит ли свет этот вариант сумматора?

Или есть рабочий способ исправить переполнение в итогах (кроме замены Currency на Float)?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB