Функция xlGetCellValue, кол-во знаков в дробной части
Модераторы: m0p3e, edward_K, Модераторы
Функция xlGetCellValue, кол-во знаков в дробной части
Использую функцию xlGetCellValue для получения числового значения из нужной ячейки в файле Excel-я.
Например там стоит: 36,1869, а xlGetCellValue возвращает 36.19.
Можно ли получить неокругленное значение ?
Например там стоит: 36,1869, а xlGetCellValue возвращает 36.19.
Можно ли получить неокругленное значение ?
Re: Функция xlGetCellValue, кол-во знаков в дробной части
Заметил, что возвращаемое значение зависит от типа переменной, куда оно попадает.
Если koef:Double - тогда округляет до 2-х знаков, если koef:String - то могу получить исходное значение, остается только разобраться с разделителем целой и дробной части.
Это, можно сказать, альтернативное решение.
Но всё равно интересно, можно ли регулировать округления ?
Если koef:Double - тогда округляет до 2-х знаков, если koef:String - то могу получить исходное значение, остается только разобраться с разделителем целой и дробной части.
Это, можно сказать, альтернативное решение.
Но всё равно интересно, можно ли регулировать округления ?
Re: Функция xlGetCellValue, кол-во знаков в дробной части
Код: Выделить всё
var
koef: string;
d1 : double;
_try
d1 := Double(koef);
_except
on ExNumberConvert:
Message('Ошибка приведения к double!');
else
Message(ExploreException);
Re: Функция xlGetCellValue, кол-во знаков в дробной части
получил 2 результата: в вашем варианте выдает всё время 'Ошибка приведения к double!', а в таком: double(replace(koef,',','.')) - выдает округленное значение до двух знаков, хотя replace(koef,',','.') - показывает 36.1869RAJAH писал(а):Не?Код: Выделить всё
var koef: string; d1 : double; _try d1 := Double(koef); _except on ExNumberConvert: Message('Ошибка приведения к double!'); else Message(ExploreException);
Re: Функция xlGetCellValue, кол-во знаков в дробной части
Что выдаст так?
Код: Выделить всё
DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999')
Re: Функция xlGetCellValue, кол-во знаков в дробной части
смотрю всё через message(); результаты таковы:RAJAH писал(а):Что выдаст так?Код: Выделить всё
DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999')
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, кол-во знаков в дробной части
Дело не в экселе...
Попробовал:
d1:Double
d1 := 36.1869;
message(d1);
Получилось 36.19;
Попробовал:
d1:Double
d1 := 36.1869;
message(d1);
Получилось 36.19;
Re: Функция xlGetCellValue, кол-во знаков в дробной части
Это просто отображается 2 знака! На самом деле, всё нормально, если
nikolaz писал(а):DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999') = 36.1869
Re: Функция xlGetCellValue, кол-во знаков в дробной части
Да, только что проверил и понялRAJAH писал(а):Это просто отображается 2 знака! На самом деле, всё нормально, еслиnikolaz писал(а):DoubleToStr(double(replace(koef,',','.')), '\4p6666~9999') = 36.1869
А почему тогда message так себя ведет ?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Функция xlGetCellValue, кол-во знаков в дробной части
все поля типа double при неявном преобразовании к строке показывают 2 знака - поэтому внимательно следите за логами компиляции. По мне так лучше чтобы там осталось только то , что совсем убрать нельзя.