Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.18;
Скачать: CL | DM;

Вниз

Float To Str & Decimal Separator   Найти похожие ветки 

 
@!!ex ©   (2007-10-22 19:05) [0]

Есть проект.
Одна из важнейших его задач - разбор текстового скрипта.
Все работает... Но тут возникла неприятная проблема.
На некоторых компьютерах вылетает эксцепшн вида:
""1000,0" is not a valid floating point value"

Как я понял, это связано с установленным в винде Decimal Separator"ом.
Но ничего толкового в справке не нашел.
Вопрос, как можно это исправить?


 
Jump   (2007-10-22 19:07) [1]

Сменить DecimalSeparator?


 
Anatoly Podgoretsky ©   (2007-10-22 19:14) [2]

> @!!ex  (22.10.2007 19:05:00)  [0]

Для данной функции эта ошибка вылетать не может.


 
vpbar ©   (2007-10-22 19:18) [3]

да. скорее всего ошибка в заголовке.
Меняй все точки и запятые на текущий DecimalSeparator.


 
Правильный_Вася   (2007-10-22 19:27) [4]


> Меняй все точки и запятые на текущий DecimalSeparator.

а если будет стоять разделитель тысяч?


 
DevilDevil   (2007-10-22 19:28) [5]

проблема преобразования FloatToStr/StrToFloat.

//MainFormOnCreate
DecimalSeparator := "," ;


Теперь преобразования будут происходить относительно запятой независимо от компьютера.


 
vpbar ©   (2007-10-22 19:32) [6]

Да. Если формат чисел в скриптах известен, то быстее как сказано [5].


 
engine ©   (2007-10-22 19:32) [7]

> [5] DevilDevil   (22.10.07 19:28)

до тех пор, пока не вылезет
«"1000.0" is not a valid floating point value»
:)


 
@!!ex ©   (2007-10-22 20:05) [8]


> [2] Anatoly Podgoretsky ©   (22.10.07 19:14)

Почему?

> [7] engine ©   (22.10.07 19:32)

Структура скрипта фиксированная и не подразумевает использование точки в качестве разделителя.


 
Anatoly Podgoretsky ©   (2007-10-22 20:10) [9]

> @!!ex  (22.10.2007 20:05:08)  [8]

Потому что, FloatToStr вставляет разделитель, который указан в переменной, а не анилизирует его, поскольку Float нет никаких разделителей, а вот наоброт StrToFloat такую ошибку может дать.


 
@!!ex ©   (2007-10-22 20:11) [10]

> [9] Anatoly Podgoretsky ©   (22.10.07 20:10)

Ааа. Ну да...
Сорри, туплю... Не то написал...


 
Anatoly Podgoretsky ©   (2007-10-22 20:15) [11]

Ошибка в заголовке или как?


 
Skyle ©   (2007-10-23 06:56) [12]

> DevilDevil   (22.10.07 19:28) [5]
> Jump   (22.10.07 19:07) [1]
> vpbar ©   (22.10.07 19:18) [3]
Отстреливал бы за такие советы. Особенно в данной конференции.


 
korneley ©   (2007-10-23 08:24) [13]


>  а не анилизирует его
Не удержался от флейма... Это от Nil?


 
Однокамушкин   (2007-10-23 08:49) [14]

var
 FormatSettings: TFormatSettings;

// Это делается один раз где-то в начале программы
GetLocaleFormatSettings(0, FormatSettings);
FormatSettings.DecimalSeparator := ",";

// Для преобразования используем перекрытый вариант StrToFloat
X := StrToFloat(S, FormatSettings);


Это позволяет делать правильные преобразования, не влияя на остальные части программы, как это будет в случае использования глобальной переменной DecimalSeparator


 
KSergey ©   (2007-10-23 11:02) [15]

> Однокамушкин   (23.10.07 08:49) [14]

Я не понимаю как это будет работать.
У него же - как я понял - извне приходящий текст, с котором не известно - точка или запятая.


 
@!!ex ©   (2007-10-23 11:35) [16]

> [15] KSergey ©   (23.10.07 11:02)

Нет-нет. Я же писал, текст стабильный, всегда с запятой.


> [14] Однокамушкин   (23.10.07 08:49)

Этот вариант подразумевает переписывание всего кода, что не есть гут. :(
А вариант предложенный в [5] чем плох?


 
umbra ©   (2007-10-23 11:40) [17]


> А вариант предложенный в [5] чем плох?
>

влияет на все потоки приложения. А FormatSettings можно сделать несколько штук и пользоваться по мере надобности разными в разных потоках.


 
@!!ex ©   (2007-10-23 11:42) [18]

> [17] umbra ©   (23.10.07 11:40)

Ок. Значит в [5] как раз то что нужно.. Спасибо!


 
Leonid Troyanovsky ©   (2007-10-23 12:50) [19]


> @!!ex ©   (23.10.07 11:42) [18]

> Ок. Значит в [5] как раз то что нужно..

Угу-мс.
Смотрим в книгу и видим фигу.

Общее от частного отличаем?

--
Regards, LVT.


 
@!!ex ©   (2007-10-23 14:37) [20]

> [19] Leonid Troyanovsky ©   (23.10.07 12:50)

Вроде отличаем. Мне как раз и надо чтобы все вызовы StrToFloat в приложении обрабатывали нормально запятую.
Где я что упустил?


 
Kolan ©   (2007-10-23 14:45) [21]

> Этот вариант подразумевает переписывание всего кода, что
> не есть гут. :(

Что-то странно что у тебя в куче мест надо будет переписывать. Может извлечь соотв методы?


 
Anatoly Podgoretsky ©   (2007-10-23 14:49) [22]

> @!!ex  (23.10.2007 14:37:20)  [20]

Тебе уже несколько раз ответили


 
@!!ex ©   (2007-10-23 15:03) [23]

> [22] Anatoly Podgoretsky ©   (23.10.07 14:49)

Да я уже сделал. :)
Но предлагать то продолжают..


 
Leonid Troyanovsky ©   (2007-10-23 15:04) [24]


> @!!ex ©   (23.10.07 14:37) [20]

> Вроде отличаем. Мне как раз и надо чтобы все вызовы StrToFloat
> в приложении обрабатывали нормально запятую.

Если юзеру не придется видеть(вводить) изуродованные тобой числа,
то, конечно, валяй.

Иначе, если не можешь следовать [14], придется менять требуемые
вызовы StrToFloat на MyStrToFloat, которая предварительно сохранит текущий DecimalSeparator, and finally - restore.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2007-10-23 15:06) [25]


> Но предлагать то продолжают..

Ты надеешься это остановить?


 
Anatoly Podgoretsky ©   (2007-10-23 15:07) [26]


> которая предварительно сохранит текущий DecimalSeparator,
>  and finally - restore.

Не очень умная мысль, до того что бы уйти от последствий этого Борланду потребовалось много времени. Надо просто использовать потоко безопасные методы и функции.


 
Leonid Troyanovsky ©   (2007-10-23 15:13) [27]


> Anatoly Podgoretsky ©   (23.10.07 15:07) [26]

> Не очень умная мысль, до того что бы уйти от последствий
> этого Борланду потребовалось много времени.

Конечно, много, за это время не один компилятор выпущен.
Но, мы-то, не в курсе, какая версия у вопрошающего,
и что он так шарахается от [14].

--
Regards, LVT.


 
Kolan ©   (2007-10-23 15:15) [28]

> и что он так шарахается от [14].

Да наверно у него FloatToStr по коду разбросано, имхо элементарного Extract Mathod хватит, чтобы исправить положение&#133


 
Anatoly Podgoretsky ©   (2007-10-23 15:29) [29]

> Kolan  (23.10.2007 15:15:28)  [28]

Да любым текстовым редактором это быстро находится и заменяется на версию с FormatSetting, тем же Дельфи


 
@!!ex ©   (2007-10-23 15:33) [30]

> [29] Anatoly Podgoretsky ©   (23.10.07 15:29)

Проблема в том, что нельзя заменять.

есть набор модулей, который универсальный и на его основе работает уже около 10 приложений.
если в этом универсальном наборе что-то менять, то править придется все зависимые приложения, а этого делать нельзя, поскольку некоторые из них уже зарелизены, и если я их трону, мне дадут по шее. Соответственно преимущество у того метода, который универсальные модули не трогает. Тоесть у описанного в [5].


 
Leonid Troyanovsky ©   (2007-10-23 15:49) [31]


> @!!ex ©   (23.10.07 15:33) [30]

> метода, который универсальные модули не трогает. Тоесть
> у описанного в [5].

Как все запущено.

--
Regards, LVT.


 
@!!ex ©   (2007-10-23 17:07) [32]

> [31] Leonid Troyanovsky ©   (23.10.07 15:49)

На самом деле все гораздо запущенней. :(
Но править уже поздно, да никто и не позволит.


 
vpbar ©   (2007-10-23 21:09) [33]

Skyle ©   (23.10.07 06:56) [12]

> DevilDevil   (22.10.07 19:28) [5]
> Jump   (22.10.07 19:07) [1]
> vpbar ©   (22.10.07 19:18) [3]
Отстреливал бы за такие советы. Особенно в данной конференции.

"Многоуважаемый" стрелок, может вы дадите свой совет. Или вы только отстреливать можете.
Чем вам так советы не понравились?
У описанного в 1 и 5 есть некоторые побочные эффекты - это нужно помнить. А у метода 3 - просто дольше выполняется.

ЗЫ Отстреливал бы тех, кто только отстреливать может, чтоб не размножались.


 
Set. ©   (2007-10-23 21:25) [34]

тут кто нить есть


 
Set. ©   (2007-10-23 21:26) [35]

мне ... эээ помощь .. ...нужна


 
@!!ex ©   (2007-10-23 21:29) [36]

> [35] Set. ©   (23.10.07 21:26)

Ну и че надо?


 
Leonid Troyanovsky ©   (2007-10-23 21:32) [37]


> Set. ©   (23.10.07 21:26) [35]

> мне ... эээ помощь .. ...нужна

Надо создать свой топик со своим вопросом,
если уж ничего подходящего не нашлось.

И обязательно прочитать
http://ln.com.ua/~openxs/articles/smart-questions-ru.html

--
Regards, LVT.


 
Skyle ©   (2007-10-24 06:35) [38]


> vpbar ©   (23.10.07 21:09) [33]
> "Многоуважаемый" стрелок, может вы дадите свой совет. Или
> вы только отстреливать можете.
> Чем вам так советы не понравились?


В принципе, причина неприятия описана в [14] и [17].


> У описанного в 1 и 5 есть некоторые побочные эффекты - это
> нужно помнить. А у метода 3 - просто дольше выполняется.

Каюсь, неверно отквотил. Отстреливать хотел ваш ответ [6], а предложить - ваш ответ [3], поскольку оригинатор не сообщил, какая у него версия Delphi.

А предлагать [1] или [5] в этой конференции без объяснения спецэффектов считаю злом и введением в заблуждение.



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.021 c
3-1183542343
HID
2007-07-04 13:45
2007.11.18
Группировка и суммирование строк в таблице dbf


6-1174150195
Dmitry_177
2007-03-17 19:49
2007.11.18
Вопрос по серверной части программы


15-1192633707
Slider007
2007-10-17 19:08
2007.11.18
С днем рождения ! 17 октября 2007 среда


2-1192988502
Stella
2007-10-21 21:41
2007.11.18
Моделирование движения зарядов


15-1191926118
нормальный человек
2007-10-09 14:35
2007.11.18
как найти работу студенту 2 курс