Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
Вниз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 хватит, чтобы исправить положение…
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.035 c