Double поля в FastReport

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Tyuchkalov
топ-софт
Сообщения: 7
Зарегистрирован: Пн, 07/07/2008 15:29
Имя Фамилия: Андрей Тючкалов
Откуда: Галактика Софт

Double поля в FastReport

Сообщение Tyuchkalov »

Добрый день.
Возникла следующая проблема: Double-поля выгружаются в FastReport с точкой ввиде разделителя разрядов. FastReport не воспринемает их как числовые и не дает соответственно произвести с ними мат. операции. К примеру агрегатная функция SUM при значениях 1 и 2 возвращает 12, а не 3. В скриптах - также не могу использовать значения таких полей - ругается что не вещественное число.
Tyuchkalov
топ-софт
Сообщения: 7
Зарегистрирован: Пн, 07/07/2008 15:29
Имя Фамилия: Андрей Тючкалов
Откуда: Галактика Софт

Сообщение Tyuchkalov »

Посмотрел DataSet - Все немного не так :). В отчет выгружается числовые значения но в строковом типе. Тогда вопрос - как в FR строку типа 123.55 преобразовать в число. Функция StrToFloat - выдает is not a valid floating point value
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Андрей Тючкалов
очевидно в ТП
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

Андрей Тючкалов, в качестве предположения могу предложить попробовать в настройках ОС заменить запятую на точку в качестве разделителя числовых значений.
Когда-то была аналогичная проблема с Excel, там такая штука дала результат
:shuffle:
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: Double поля в FastReport

Сообщение larin »

Добрый день! Извините за задержку ответа. Упустил ваше сообщение из виду.

Задачу перевода числа в произвольном строковом виде (с запятыми, с точками, с разделителями тысяч) в числовой формат можно решить примерно следующим образом. В отчет FastReport на закладку «код» поместить функцию:

Код: Выделить всё

function myStrToExtended(s : string):extended;
var
  i: Integer;
begin
  Result := 0;

  // удалить разделители тысяч - на всякий случай                                                                                                                
  while Pos(' ', s) <> 0 do
    Delete(s, Pos(' ', s), 1);

  try
    // попробовать конвертацию для точки                                                                        
    for i := 1 to Length(s) do
      if s[i] in [',', '.'] then
        s[i] := '.';
          
    Result := StrToFloat(s);
  except
    // если не получилось  попробовать конвертацию для запятой                                                                                                     
    for i := 1 to Length(s) do
      if s[i] in [',', '.'] then
        s[i] := ',';
          
    Result := StrToFloat(s);
  end;                            
end;   


В отчете ее можно использовать следующим образом

Код: Выделить всё

[myStrToExtended('12345.678')]  и [myStrToExtended('12345,678')]
Пример отчета во вложенном файле:
Вложения
myStrToExtended-sample.zip
(1.08 КБ) 584 скачивания
Ответить