Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Float To Str & Decimal Separator


Страницы:   1 2

@!!ex ©   (2007-10-22 19:05:00) 

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

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


@!!ex   (2007-10-23 11:42:00) [21]

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

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


umbra   (2007-10-23 11:40:00) [22]


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

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


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

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

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


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

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


KSergey   (2007-10-23 11:02:00) [24]

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

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


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

var
 FormatSettings: TFormatSettings;

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

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


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


korneley   (2007-10-23 08:24:00) [26]


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


Skyle   (2007-10-23 06:56:00) [27]

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


Anatoly Podgoretsky   (2007-10-22 20:15:00) [28]

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


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

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

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


Anatoly Podgoretsky   (2007-10-22 20:10:00) [30]

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

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


@!!ex   (2007-10-22 20:05:00) [31]


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

Почему?

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

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


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

> [5] DevilDevil   (22.10.07 19:28)

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


vpbar   (2007-10-22 19:32:00) [33]

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


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

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

//MainFormOnCreate
DecimalSeparator := ',' ;


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


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


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

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


vpbar   (2007-10-22 19:18:00) [36]

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


Anatoly Podgoretsky   (2007-10-22 19:14:00) [37]

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

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


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

Сменить DecimalSeparator?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо