вторник, 1 февраля 2011 г.

Выбор из строки числа в формате Exel

Как известно, в Экселе иногда встречается запись числа типа

1,566653e5


Где e - это у нас степень числа. Так вот в одном проекте мне нужно было выбрать из строки такое число. Решил эту задачу регуляркой. Сама регулярка конечно моет и не блещет идеалом и сам код можно улучшить, но что есть. Писал на Qt4 C++

long double convert(QString in)
{
QRegExp rx("([\\-]{0,1}[0-9]{1,}[\\.\\,]{0,1}[0-9]{0,})(|\\e)([\\-]{0,1}[0-9]{0,})");
if(rx.indexIn(in)!=-1)
{
double cel=rx.cap(1).toDouble(); // целая часть
if(rx.cap(2).size()!=0)
{
if(rx.cap(3).size()>0)
{
long double res=pow(cel,rx.cap(3).toDouble());

return res;
}
else
{
QMessageBox::critical(0,QString("Error"),QString("Set a in true format"));
return -100;
}
}
else
{

return cel;
}
}
return in.toDouble();
}