Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5 6   вперед  Ctrl      все
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Котовасия
Member

Откуда:
Сообщений: 1185
rgreat,

лапочка ты наш.
3 сен 18, 22:57    [21663236]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Василий 2
Member

Откуда:
Сообщений: 700
Для программ со скрипом еще допустимо юзать FormatSettings. Но только при условии, что все библиотеки ведут себя порядочно и сами FormatSettings не касаются. Да и то возможны накладки.
Однако за наводку на UpdateFormatSettings спасибо, не знал. Стало быть, предусмотрен подхват смены значений юзером.
4 сен 18, 11:43    [21663699]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
rgreat
Member

Откуда:
Сообщений: 5210
Василий 2
возможны накладки.
Расскажи мне для общего образования причины возможныхвлзможны накладок?

Но окромя явных ошибок програмстов в собственном коде.
4 сен 18, 14:31    [21664069]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Василий 2
Member

Откуда:
Сообщений: 700
rgreat
Василий 2
возможны накладки.
Расскажи мне для общего образования причины возможныхвлзможны накладок?

Но окромя явных ошибок програмстов в собственном коде.

Ну например, использование переменной может произойти до ее высечения в мраморе. Некий модуль может быть иниц-н раньше. Т.е. порядок юзанья юнитов должен быть регламентирован, а это слабое звено, т.к. не контролируется компилятором. Или другой вариант - кто-то может забыться и временно поменять поле записи. В коллективной разработке с кучей прогеров, да еще и не одного "поколения" вполне вероятно упустить такие детали.
Так что "если б я была царица", и если уж никак не обойтись без глобальной переменной, я бы рекомендовал завести собственную константу и иниц-ть ее через хак по указателю. Таким образом точно будет страховка от влияния библиотек раз и защита от ненамеренной модификации два.
4 сен 18, 14:56    [21664114]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
rgreat
Member

Откуда:
Сообщений: 5210
Василий 2,
автор
Ну например, использование переменной может произойти до ее высечения в мраморе. Некий модуль может быть иниц-н раньше.
Мы говорим не абстрактную глобальную переменную а про вполне конкретную из System.SysUtils, иннициализируемую в нем же в разделе initialization.

Как она может быть не иннициализированой при ее использовании? ;)

автор
забыться и временно поменять

Это просто ошибка програмиста, которая может быть где угодно.

автор
В коллективной разработке с кучей прогеров, да еще и не одного "поколения" вполне вероятно упустить
За такое надо бить, и можно даже ногами.
Менять глобальный FormatSettings в процессе работы ПО - это из разряда стрельбы себе (и соседям) в ногу.

автор
рекомендовал завести собственную константу и иниц-ть ее через хак по указателю

Не-не-не, Девид Блейн, я лучше по старинке. ;)
4 сен 18, 18:40    [21664555]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Gator
Member

Откуда: Москва
Сообщений: 14885
rgreat,

Не-не-не. Фигня эта всё про DecimalSeparator и остальное. Есть СТАНДАРТ, конвенции, от них и надо плясать.

https://ru.wikipedia.org/wiki/Открытый_формат
https://ru.wikipedia.org/wiki/Формат
5 сен 18, 01:35    [21664922]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Василий 2
Member

Откуда:
Сообщений: 700
rgreat
Василий 2,
автор
Ну например, использование переменной может произойти до ее высечения в мраморе. Некий модуль может быть иниц-н раньше.
Мы говорим не абстрактную глобальную переменную а про вполне конкретную из System.SysUtils, иннициализируемую в нем же в разделе initialization.

Как она может быть не иннициализированой при ее использовании? ;)

Ты же её предлагал заполнять фиксированными значениями. Это я и имел в виду.
5 сен 18, 14:39    [21665752]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
rgreat
Member

Откуда:
Сообщений: 5210
Василий 2
Ты же её предлагал заполнять фиксированными значениями. Это я и имел в виду.

Я предлагал выставить её 1 раз при старте ПО и больше не трогать.
5 сен 18, 20:00    [21666222]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Василий 2
Member

Откуда:
Сообщений: 700
rgreat
Василий 2
Ты же её предлагал заполнять фиксированными значениями. Это я и имел в виду.

Я предлагал выставить её 1 раз при старте ПО и больше не трогать.

Ну. А старт ПО - понятие растяжимое.
6 сен 18, 11:57    [21666730]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 217
В продолжении темы, часто рисуются графики для иностранных заказчиков, где в требованиях четко прописано "разделитель на рисунках - точка". В то время как у нас наоборот - "запятая".
Вопрос, рисую посредством стандартного Chart (функционала вполне хватает). Как "потокобезопасно" поменять разделитель, что бы он выводился строго в графиках Chart-a, параметра такого не нашел (хотя может плохо искал), да и видно что подхватывают глобальный DecimalSeparator.

Менять глобальный DecimalSeparator не просто "потоконебезопасно", а в моём случае более чем опасно, так как отрисовка графика и подгрузка данных вполне могут идти одновременно в разных потоках.

К сообщению приложен файл. Размер - 146Kb
7 авг 19, 16:46    [21943987]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 217
Андрей Игоревич
В продолжении темы, часто рисуются графики для иностранных заказчиков, где в требованиях четко прописано "разделитель на рисунках - точка". В то время как у нас наоборот - "запятая".
Вопрос, рисую посредством стандартного Chart (функционала вполне хватает). Как "потокобезопасно" поменять разделитель, что бы он выводился строго в графиках Chart-a, параметра такого не нашел (хотя может плохо искал), да и видно что подхватывают глобальный DecimalSeparator.

Менять глобальный DecimalSeparator не просто "потоконебезопасно", а в моём случае более чем опасно, так как отрисовка графика и подгрузка данных вполне могут идти одновременно в разных потоках.

Блин, думал маленькая картинка вставится, а вставилась здоровая, редактировать не могу, ну и фиг с ним.
7 авг 19, 16:47    [21943989]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30273

07.08.2019 16:47, Андрей Игоревич пишет:
> Менять глобальный DecimalSeparator не просто "потоконебезопасно", а в моём случае более чем ОПАСНО

ах, как интересно!
я уже таки внемлю.
вещай.
про опасность.


Posted via ActualForum NNTP Server 1.5

7 авг 19, 16:50    [21943992]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 217
Мимопроходящий
07.08.2019 16:47, Андрей Игоревич пишет:
> Менять глобальный DecimalSeparator не просто "потоконебезопасно", а в моём случае более чем ОПАСНО

ах, как интересно!
я уже таки внемлю.
вещай.
про опасность.



??? Если я для отрисовки графиков меняю данную переменную на '.' и в этот же момент другим потоком у меня считываются данные с файла где разделитель ',' - произойдет что...?

Тут и не только тут писали про "локальную переменную", но как создать её только для отрисовки Чарта - не знаю и поиском в лоб не нашел (хотя уверен, что это вопрос уже 1000 раз поднимался, как и любой другой, просто надо грамотно составить запрос в поисковике или прочитать какую-нибудь умную книгу, но вот я пока не смог).
7 авг 19, 17:03    [21944007]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30273

07.08.2019 17:03, Андрей Игоревич пишет:
> произойдет что...?

да!
что?

Posted via ActualForum NNTP Server 1.5

7 авг 19, 17:08    [21944012]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
ёёёёё
Member

Откуда:
Сообщений: 689
У тебя что, нити одновременно с разными форматами работают? :)

Задай DecimalSeparator при старте приложения, а после создавай нити.
7 авг 19, 17:12    [21944015]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 540
можно пойти по другому пути:
- допустим текущий локальный разделитель в системе - запятая
- в текстовой строке, перед конвертацией в число, ищем символ "точка" - если нашли, заменяем на символ "запятая"
- конвертируем откорректированную строку в число. изменение глобальной переменной не потребовалось, профит
7 авг 19, 17:12    [21944016]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 217
Мимопроходящий
07.08.2019 17:03, Андрей Игоревич пишет:
> произойдет что...?

да!
что?

Зуб даешь, что ничего? Быстрый тест сразу привел к ошибке формата числа.
ёёёёё
У тебя что, нити одновременно с разными форматами работают? :)
Задай DecimalSeparator при старте приложения, а после создавай нити.

Я то работаю с одним форматом, но на картинках в документах формат может быть разный, так как требования к разделителю в каждом государстве свои, а работаем мы с разными заказчиками.
asutp2
можно пойти по другому пути:
- допустим текущий локальный разделитель в системе - запятая
- в текстовой строке, перед конвертацией в число, ищем символ "точка" - если нашли, заменяем на символ "запятая"
- конвертируем откорректированную строку в число. изменение глобальной переменной не потребовалось, профит

Оно конечно можно, но на данный момент я открываю и сохраняю 30+ видов файлов в разного формата размещения текста (всякие разные массивы, данные, массивы строк и прочее), я несколько недель писал код чтоб всё это аккуратно и надежно открывать в потоке, впихивать во всё это замену точки на запятую нетривиальная задача для меня, мне проще уж на момент отрисовки графиков остановить все потоки :), отрисовать и возобновить. Но что одно, что другое не просто костыли, целая инвалидная коляска.
7 авг 19, 17:24    [21944021]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30273

07.08.2019 17:24, Андрей Игоревич пишет:
> Быстрый тест сразу привел к ошибке формата числа.

ах, как интересно!
ну-ка, ну-ка, опубликуй.

> Я то работаю с одним форматом, но на картинках в документах формат может быть разный

то что ты выставляешь в DecimalSeparator ну никак не влияет на настройки ОС.
ваще.

Posted via ActualForum NNTP Server 1.5

7 авг 19, 17:28    [21944027]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 217
Мимопроходящий
07.08.2019 17:24, Андрей Игоревич пишет:
> Быстрый тест сразу привел к ошибке формата числа.

ах, как интересно!
ну-ка, ну-ка, опубликуй.

> Я то работаю с одним форматом, но на картинках в документах формат может быть разный

то что ты выставляешь в DecimalSeparator ну никак не влияет на настройки ОС.
ваще.

А при чем тут настройки ОС? И считываю и рисую я в одной программе...
Выглядит это так:
1. Этап расчет во внешней программе
2. Подгрузка в мою программу
3. отрисовка подгруженного (что пользователю желаемо наблюдать в данный момент)
4. GoTo1

Расчет идет весьма долго и возможность в любой момент оценить результаты весьма важна.
7 авг 19, 17:34    [21944030]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30273

07.08.2019 17:34, Андрей Игоревич пишет:
> А при чем тут настройки ОС? И считываю и рисую я в одной программе...
> Выглядит это так:
> 1. Этап расчет во внешней программе
> 2. Подгрузка в мою программу
> 3. отрисовка подгруженного (что пользователю желаемо наблюдать в данный момент)
> 4. GoTo1
>
> Расчет идет весьма долго и возможность в любой момент оценить результаты весьма важна.

и шо?
в чем твои проблемы?
как делал?
что не получилось?

Posted via ActualForum NNTP Server 1.5

7 авг 19, 17:39    [21944032]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Андрей Игоревич
Member

Откуда:
Сообщений: 217
Мимопроходящий
07.08.2019 17:34, Андрей Игоревич пишет:
> А при чем тут настройки ОС? И считываю и рисую я в одной программе...
> Выглядит это так:
> 1. Этап расчет во внешней программе
> 2. Подгрузка в мою программу
> 3. отрисовка подгруженного (что пользователю желаемо наблюдать в данный момент)
> 4. GoTo1
>
> Расчет идет весьма долго и возможность в любой момент оценить результаты весьма важна.

и шо?
в чем твои проблемы?
как делал?
что не получилось?

Шо-шо, сменил значение глобальной переменной - отрисовал - поменял назад, в это же время в другом потоке идет подгрузка с файлов (файлы огромные, открывает долго), при ручном запуске потоков для теста - сразу вылетела ошибка формата.

Если глобальная переменная DecimalSeparator будет изменена после запуска потока - гарантируется ли это, что в потоке проблем не будет? Поток как-то её фиксирует на момент запуска?
7 авг 19, 18:06    [21944052]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30273

07.08.2019 18:06, Андрей Игоревич пишет:
> сменил значение глобальной переменной - отрисовал - ПОМЕНЯЛ НАЗАД...

нахрена?

Posted via ActualForum NNTP Server 1.5

7 авг 19, 18:11    [21944054]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48132

Андрей Игоревич
сменил значение глобальной переменной

Никогда, ни при каких обстоятельствах, так делать не надо.

Posted via ActualForum NNTP Server 1.5

7 авг 19, 18:13    [21944056]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30273

07.08.2019 18:13, Dimitry Sibiryakov пишет:
> Никогда, ни при каких обстоятельствах, так делать не надо.

ой, я вас умоляю!

Posted via ActualForum NNTP Server 1.5

7 авг 19, 18:16    [21944060]     Ответить | Цитировать Сообщить модератору
 Re: FloatToStr и знак разделителя десятичной дроби в разных системах  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1364
Андрей Игоревич,

если сам занимаешься конвертированием значений в потоках, то можно использовать функции с локальным FormatSettings, см хелп по
function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended; overload;
7 авг 19, 18:19    [21944063]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5 6   вперед  Ctrl      все
Все форумы / Delphi Ответить