Страница 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 знака - поэтому внимательно следите за логами компиляции. По мне так лучше чтобы там осталось только то , что совсем убрать нельзя.