|
|
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Есть программа, хорошо работает. Переношу экзешник на другую систему - не работает. Долго и занудно искал ошибку, нашел: В одной системе FloatToStr преобразует текст с запятой в число без проблем, а в другой выдаёт ошибку автор'-0,59' is not a valid floating point value Если менять заменять точку при считывании - во второй системе всё работает, в первой нет - как это можно аккуратно обыграть (ну я понимаю, что можно через костыль, типа в случае ошибки считывания менять одно на другое и считывать заново, но костыли - зло), наверняка есть способ попроще. А вообще, что удивительно, до определённого момента всё работало на обеих системах, а потом хоп и перестало (знак разделителя в системе сам не менял, но комп рабочий, может админы чего намудрили). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 10:11 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, FormatSettings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 10:14 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичВ одной системе FloatToStr преобразует текст с запятой в число без проблем FloatToStr годится только для строк, которые вводит пользователь в соответствии с его пользовательскими настройками. Если ты откуда-то берёшь строку фиксированного формата, то к ней надо применять функции преобразования с фиксированным форматом. Например, Val(). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 12:45 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
DarkMaster, Спасибо: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 13:18 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, Точнее наоборот Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 13:19 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичТочнее наоборот нужно сделать 2 варианта замены Андрей ИгоревичFloatToStr преобразует текст с запятой в число без проблем, а в другой выдаёт ошибку Код: pascal 1. 2. т.е. чтобы не гадать, что там у пользователя, можно и точку, и запятую заменить на "FormatSettings.DecimalSeparator" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 13:27 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
X11, Спасибо, так и сделаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 13:29 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
X11нужно сделать 2 варианта заменыНе нужно. Если данные формируются в этой системе, то используем дефолтный разделитель. Если приходят снаружи, то используем разделитель согласно протокола ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 13:34 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
X11нужно сделать 2 варианта замены Код: pascal 1. 2. т.е. чтобы не гадать, что там у пользователя, можно и точку, и запятую заменить на "FormatSettings.DecimalSeparator" Борланд научил плохому, а все и рады потакать дурным привычкам. FormatSettings как глобальную переменную надо избегать всеми силами кроме тех случаев, когда она используется по назначению - как текущие региональные настройки. Да и то, глобальная переменная - зло, и более правильно TFormatSettings.Create('') непосредственно перед применением. Потому как: 1) Некая библиотека глубоко внутри себя сменила DecimalSeparator на что-то свое, и не вернула прежнее значение. 1.1) Некая библиотека глубоко внутри себя сменила DecimalSeparator на что-то свое, и не успела вернуть прежнее значение, как из другого потока выполняется обращение к этому полю 2) Программа запущена, юзер сменил региональные настройки. FormatSettings содержит старые значения. и т.д. В общем, я советую так (к чему пришел на своем опыте): 1) Float/DateToStr, Format без параметра типа TFormatSettings - только для отображения, да и то осмысленно 2) Во всех остальных случаях - фиксированный экземпляр TFormatSettings, с жестко прописанными полями. В качестве основы можно взять, например, LOCALE_INVARIANT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 15:14 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичАндрей Игоревич, Точнее наоборот Код: pascal 1. Когда пользуетесь настройкой глобального FormatSettings не забывайте о: Код: pascal 1. А то вы рискуете огрести проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 15:31 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_X11нужно сделать 2 варианта заменыНе нужно. Если данные формируются в этой системе, то используем дефолтный разделитель. Если приходят снаружи, то используем разделитель согласно протокола У меня другие рекомендации 1. системные настройки формата использовать только для вывода на экран/конвертации пользовательского ввода 2. для файловых операций использовать стандартизованные (протокольные) 3. чтобы не было коллизий вспомнить про третий параметр функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 16:26 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
rgreatАндрей ИгоревичАндрей Игоревич, Точнее наоборот Код: pascal 1. Когда пользуетесь настройкой глобального FormatSettings не забывайте о: Код: pascal 1. А то вы рискуете огрести проблем. Она локальная, и стртуфлоат принимает вторым параметром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 16:52 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
JaDi, в нормальных делфях, естественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 16:52 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
JaDiОна локальная Да ну? Код: pascal 1. 2. 3. 4. 5. 6. 7. JaDiи стртуфлоат принимает вторым параметром.FloatToStr и без 2-го параметра бывает. Причем если проект разрабатывается нормально (без бардака), то проще использовать именно такой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 17:53 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
rgreatJaDiи стртуфлоат принимает вторым параметром.FloatToStr и без 2-го параметра бывает. Причем если проект разрабатывается нормально (без бардака), то проще использовать именно такой. О да, результат использования без форматсеттинга прекрасно виден в этом самом топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 18:25 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
JaDiО да, результат использования без форматсеттинга прекрасно виден в этом самом топике.Трудно-ли умеючи? (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 18:45 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
rgreat, так-так, чуствую, далее пойдет предложение следить за компами пользователей и их настройками :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 18:58 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Делай так. Код: pascal 1. 2. И можешь не следить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 19:01 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Но особо огороженные граждане могут каждый раз генерить свою копию FormatSettings. Разрешаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 19:02 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
rgreatНо особо огороженные граждане могут каждый раз генерить свою копию FormatSettings. Зачем каждый раз? Одного экземпляра для всех файловых операций вполне достаточно. А переключение дефолтного рано или поздно непременно приведет к косякам. Например в многопоточном приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 20:57 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисА переключение дефолтного рано или поздно непременно приведет к косякам. Например в многопоточном приложении.Зачем его вообще переключать? Один раз выставил как надо при старте и радуйся. Делать разные разделители в разных местах приложения - это либо явный bad design, либо исключение без которого никак не обойтись, но тут уже не зазорно и локальный TFormatSetting поюзать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 21:18 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
rgreatЗачем его вообще переключать? Затем, что в UI должны быть системные настройки, а в файле стандартизованные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 22:34 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисrgreatЗачем его вообще переключать? Затем, что в UI должны быть системные настройки, а в файле стандартизованные. Ой да ладно, "должны". Мы во всех приложениях при старте выставляем единые настройки формата, а дальше пользуйся чем бог на душу положит, все равно десятичный разделитель - всегда точка, а дата - всегда только вот в таких форматах, невзирая на системные настройки, и никто никогда ни разу не жаловался, а наоборот. Может быть, когда начнем англичанам софт продавать, формат даты будем системный использовать, а в России и так сойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 22:51 |
|
||
|
FloatToStr и знак разделителя десятичной дроби в разных системах
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисЗатем, что в UI должны быть системные настройкиНефиг. Как минимум не в корпоративном ПО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 22:53 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39697270&tid=2038805]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 482ms |

| 0 / 0 |
