Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизПроблема 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c