Проблема десятичной точки под виндой [РЕШЕНО]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Проблема десятичной точки под виндой [РЕШЕНО]

Сообщение vada »

Не прошло и пол года как я обновил таки лазарус до 0.9.30. Ибо проект заказчику сдал.

Засунул под 0.9.30 свой проект, и... естессено, ничего не работает.
Про танцы с бубном по поводу UTF8 рассказывать не буду. Функций UTF8Encoder и UTF8Decoder стало несколько и компилятор в недоумении какую в данном случае пользовать. Это почини. Порядка сотни исправлений в коде. :( А оно мне надо?

Но осталась нерешенной проблема с десятичной точкой.
Дело в следующем, что в версии лазаруса 0.9.29 для функции StrToFloat не было разницы строка с точкой или запятой. Это меня устраивало по двум причинам:
1 - в инженерных расчетах принята десятичная точка. Обмен данными между различными программами идет текстовыми файлами в которых числа с десятичной точкой. Мне этот файл читать и преобразовывать.;
2 - в винде, по умолчанию, для русской локали используется десятичная запятая. И если я в своей программе делаю FloatToStr то получаю строку с запятой. Обратное преобразование в Real проблем не вызывало. Функции StrToFloat можно было подсунуть что угодно, хоть с точкой, хоть с запятой. Молча преобразовывалось в Real. Даже если в настройках винды указывали что десятичные разряды разделяют точкой, все у меня прекрасно работало.

В лазарусе 0.9.30 все починили (вернее поломали). Теперь если в локали установлена запятая, преобразовать строку с точкой в Real не удастся. И наоборот, если в локали точка, то срока с запятой не катит.

Чё делать то? Настройки локали у пользователей у каждого своя. А хочется чтоб работало у всех.
Может есть какаято фича в лазарусе для определения чего там в текущей локале в качестве разделителя настроено? Сам найти не смог. Может многоуважаемый ALL знает?

HELP!!!!
Последний раз редактировалось vada 25.08.2011 16:15:43, всего редактировалось 1 раз.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Код: Выделить всё

initialization
  DecimalSeparator:='.';

end.   
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Опа!!!!!!!!!!!!
Спасибо! Заработало!
Аватара пользователя
Widowmaker
новенький
Сообщения: 37
Зарегистрирован: 27.04.2011 18:32:04

Сообщение Widowmaker »

Mille grazie!!!
Мучала та ж ботва. С горя начал было самопальный парсер ваять... :lol:
Frolik
постоялец
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Сообщение Frolik »

куда это вписывать?
Андрей Варкентин
новенький
Сообщения: 21
Зарегистрирован: 17.09.2010 11:56:14

Сообщение Андрей Варкентин »

Я пишу в исходный код проекта (.lpr) сразу после "begin":

Код: Выделить всё

begin
  SysUtils.DecimalSeparator:='.';
...
end. 
Ответить