Функция xlGetCellValue, кол-во знаков в дробной части

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
nikolaz

Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение nikolaz »

Использую функцию xlGetCellValue для получения числового значения из нужной ячейки в файле Excel-я.
Например там стоит: 36,1869, а xlGetCellValue возвращает 36.19.

Можно ли получить неокругленное значение ?
nikolaz

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение nikolaz »

Заметил, что возвращаемое значение зависит от типа переменной, куда оно попадает.
Если koef:Double - тогда округляет до 2-х знаков, если koef:String - то могу получить исходное значение, остается только разобраться с разделителем целой и дробной части.
Это, можно сказать, альтернативное решение.
Но всё равно интересно, можно ли регулировать округления ?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение RAJAH »

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

var
  koef: string;
  d1 : double;
_try
  d1 := Double(koef);
_except
  on ExNumberConvert:
    Message('Ошибка приведения к double!');
  else
    Message(ExploreException);
Не?
nikolaz

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение nikolaz »

RAJAH писал(а):

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

var
  koef: string;
  d1 : double;
_try
  d1 := Double(koef);
_except
  on ExNumberConvert:
    Message('Ошибка приведения к double!');
  else
    Message(ExploreException);
Не?
получил 2 результата: в вашем варианте выдает всё время 'Ошибка приведения к double!', а в таком: double(replace(koef,',','.')) - выдает округленное значение до двух знаков, хотя replace(koef,',','.') - показывает 36.1869
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение RAJAH »

Что выдаст так?

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

DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999')
nikolaz

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение nikolaz »

RAJAH писал(а):Что выдаст так?

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

DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999')
смотрю всё через message(); результаты таковы:

DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999') = 36.1869
double(DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999')); = 39.19
round(DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999')),6); = 39.19
round(DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999')),1); = 39.20
)

Непонятно, почему всё округляется до двух и менее! знаков...
nikolaz

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение nikolaz »

Дело не в экселе...
Попробовал:

d1:Double
d1 := 36.1869;
message(d1);

Получилось 36.19;
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение RAJAH »

Это просто отображается 2 знака! :) На самом деле, всё нормально, если
nikolaz писал(а):DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999') = 36.1869
nikolaz

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение nikolaz »

RAJAH писал(а):Это просто отображается 2 знака! :) На самом деле, всё нормально, если
nikolaz писал(а):DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999') = 36.1869
Да, только что проверил и понял :)

А почему тогда message так себя ведет ?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Функция xlGetCellValue, кол-во знаков в дробной части

Сообщение edward_K »

все поля типа double при неявном преобразовании к строке показывают 2 знака - поэтому внимательно следите за логами компиляции. По мне так лучше чтобы там осталось только то , что совсем убрать нельзя.
Ответить