Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 хватит, чтобы исправить положение&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.051 c
15-1192531815
ZeroDivide
2007-10-16 14:50
2007.11.18
Кстати, тоже вопрос по русскому :)


2-1193229696
alll_23
2007-10-24 16:41
2007.11.18
Как лучше считать дерево из таблицы БД в TreeView?


15-1192546038
oldman
2007-10-16 18:47
2007.11.18
Есть такая страна Мьянма. У них война, а они Интернет чинят... :)


2-1193145393
Sergey2
2007-10-23 17:16
2007.11.18
не показывается popupmenu


2-1193124346
QAlexey
2007-10-23 11:25
2007.11.18
TPopupMenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский