Китайцца атакует!
Jul. 2nd, 2010 04:13 pmА чтобы было еще смешнее скажу, что перед единственым использованием этого творения, стоит проверка на числовое значение передаваемой строки. :)
float TSettingsChart::FmtStr(AnsiString &Value) { float Result; AnsiString StrRes="0"; // 0, чтобы, если изображение в колонке отсутствует, привести к float. char buff[1]; try { Set <char,'0','9'> D_S; D_S<<'0'<<'1'<<'2'<<'3'<<'4'<<'5'<<'6'<<'7'<<'8'<<'9'; for(int i=1;i<len(Value);i++) { strcpy(buff,Value.SubString(i, 1).c_str()); if (D_S.Contains(buff[0]) || Value.SubString(i, 1)==".") StrRes += Value.SubString(i, 1); } Result = StrRes.ToDouble(); } catch(Exception &e) { Application->ShowException(&e); } return Result; }
no subject
Date: 2010-07-02 05:36 pm (UTC)Правда не совсем понятно, что будет выдано на строке типа
"Мама пришла из магазина. Она купила 1 булку, 3 огурца и брюкву. Завтра 8-е марта!"
Как работает ToDouble() для ".13.8"?
no subject
Date: 2010-07-04 04:38 pm (UTC)Программа начиает гнать феерический бред, когда у нас в региональных настройках БД стоит запятая.
Но самое смешное, что эта функция написана для единственного применения (Она вызывается из БД как FmtStr(Field->Text) ), и перед ней стоит проверка, на числовое значение TField::IsNumber().
no subject
Date: 2010-07-05 08:42 am (UTC)PS
По-моему там ловится эксепшн. Откуда тогда "паник мод"?
no subject
Date: 2010-07-05 10:52 am (UTC)Здесь, на самый худой конец, эксепшен должен подавляться, а функция должна возвратить 0.
no subject
Date: 2010-07-05 10:59 am (UTC)no subject
Date: 2010-07-05 08:44 am (UTC)no subject
Date: 2010-07-05 10:51 am (UTC)no subject
Date: 2010-07-04 04:27 pm (UTC)