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

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

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

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

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

Добавлено: 05 июл 2013, 14:38
nikolaz
Заметил, что возвращаемое значение зависит от типа переменной, куда оно попадает.
Если koef:Double - тогда округляет до 2-х знаков, если koef:String - то могу получить исходное значение, остается только разобраться с разделителем целой и дробной части.
Это, можно сказать, альтернативное решение.
Но всё равно интересно, можно ли регулировать округления ?

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

Добавлено: 05 июл 2013, 14:53
RAJAH

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

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

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

Добавлено: 05 июл 2013, 15:06
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

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

Добавлено: 05 июл 2013, 15:16
RAJAH
Что выдаст так?

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

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

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

Добавлено: 05 июл 2013, 16:14
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
)

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

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

Добавлено: 05 июл 2013, 16:21
nikolaz
Дело не в экселе...
Попробовал:

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

Получилось 36.19;

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

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

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

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

А почему тогда message так себя ведет ?

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

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