Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Проблема DecimalSeparator   Найти похожие ветки 

 
ghostbusterr   (2004-03-25 08:28) [0]

Вот какую неприятную вещь обнаружил...
Программа при запуске устанвливает DecimalSeparator := ".".
Потом круглосуточно собирает данные с устройств и записывает в базу под firebird"ом.
Дробные числа конвертятся в строку функцией format("%.3f", [x]).
Затем через неопределенный интервал времени DecimalSeparator в format"е возвращается
к стандартному - ",". Соответственно sql не проходит, даннные теряются.
После перезапуска проги - все ок.
Нормально проработать может иногда час, иногда суток 3-ое...
Кто запятую возвращает, чей косяк?


 
Романов Р.В. ©   (2004-03-25 08:38) [1]

F1 - TApplication.UpdateFormatSettings


 
ZrenBy ©   (2004-03-25 10:27) [2]

Записывай дробные числа в формате без всяких точек, запятых,
и прочих знаков препинания

Например -234.5364534 = -2345364534000000E-013


 
PVOzerski ©   (2004-03-25 11:56) [3]

Мой добрый совет: ну ее подальше, эту запятую... Заменяй десятичный разделитель везде на точку, строку в число переводи функцией Val , а число в строку - функцией Str (она и форматировать немножко умеет...)


 
ghostbusterr   (2004-03-25 13:28) [4]

Дык это понятно -
Function  FloatStr(X:extended; width, decimals: integer):string;
var
 s: string;
begin
 str(X:width:decimals, s);
 result := trim(s);
end;

Интерсно разобраться почему...


 
Anatoly Podgoretsky ©   (2004-03-25 14:34) [5]

Это глобальная переменая, не потоко безопасная!


 
YuRock ©   (2004-03-25 14:37) [6]

У меня такое тоже бывало (и не раз). Проблему решил следующим образом: при сообщении WM_ACTIVATEAPP всегда ставил

DecimalSeparator := "."


 
Fay ©   (2004-03-25 14:54) [7]

2YuRock ©   (25.03.04 14:37) [6]
А в файле проекта нельзя было написать? Если да, то почему?


 
Романов Р.В. ©   (2004-03-25 15:02) [8]


> YuRock ©   (25.03.04 14:37) [6]

Use UpdateFormatSettings to control automatic updating of format settings. The default of True is set in the constructor. UpdateFormatSettings is checked when the application receives a WM_WININICHANGE message.

function TApplication.CheckIniChange(var Message: TMessage): Boolean;
begin
 Result := False;
 if (Message.Msg = RM_TaskbarCreated) or
    (Message.Msg = WM_WININICHANGE) then
 begin
   if UpdateFormatSettings then
   begin
     SetThreadLocale(LOCALE_USER_DEFAULT);
     GetFormatSettings; // Изменение DecimalSeparator
   end;



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.088 c
3-1081938856
Hazg
2004-04-14 14:34
2004.04.11
Создание базы через Query в кодировке 866


4-1078991879
Карелин Артем
2004-03-11 10:57
2004.04.11
Как получить права на запуск/остановку сервисов?


7-1075725608
Falendysh
2004-02-02 15:40
2004.04.11
Работа с посторонними окнами


14-1079692733
Chcnger
2004-03-19 13:38
2004.04.11
Список сайтов, как очистить


1-1079945518
Grihan
2004-03-22 11:51
2004.04.11
Доступ к событиям вложенного объекта через инспектор объектов.