Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизНепонятки форматирования Найти похожие ветки
← →
remark (2006-01-13 04:19) [0]Пример ниже демонстрирует bug c форматированием.
Если кто в курсе подскажите рецепт, как обойти.
Данный глюк наблюдается только с определёнными числами.
Закономерность не нашёл, поскольку в ассемблере не силён.
Замечено на Delphi 7.
var
v : Double;
begin
v := 18.455;
ShowMessage("Variable formating: "+(FormatFloat("0.00,", v))+#13+"Direct formating: "+(FormatFloat("0.00,", 18.455)));
end;
← →
Джо © (2006-01-13 04:44) [1]Функция FormatFloat требует аргумента типа Extended. Замени
v : Double
наv : Extended;
← →
remark (2006-01-13 05:04) [2]Спасибо всё верно, так работает.
А почему вот так не работает я не могу врубиться.
Это как раз по моему случаю. Первый пример был упрощён.
var
v : Extended;
vr : Variant;
begin
vr := 18.455;
v := vr;
ShowMessage("Variable formating: "+(FormatFloat("0.00,", v))+#13+"Direct formating: "+(FormatFloat("0.00,", 18.455)));
end;
← →
Джо © (2006-01-13 05:22) [3]Variant, если я правильно помню, вещественные значения хранит как раз в Double. Т.е, при неявном преобразовании варианта к вещественному значению будет выдаваться значение именно типа Double. В общем, наверное, в этом причина.
← →
remark (2006-01-13 05:36) [4]Workaround
v := StrToFloat(FloatToStr(vr));
Но криво всё это.
Джо сэнкс.
← →
remark (2006-01-13 06:35) [5]Проверьте в FastReport формат переменной "0.00" для числа 18.455
Будете приятно удивлены
← →
Leonid Troyanovsky © (2006-01-13 08:35) [6]
> remark (13.01.06 04:19)
> Пример ниже демонстрирует bug c форматированием.
> Если кто в курсе подскажите рецепт, как обойти.
> Данный глюк наблюдается только с определёнными числами.
Дело, IMHO, не в форматировании, а в разном представлении Extended
vs Double. Бо, дельфи считает нецелочисленные константы как Extended.
См. также:
var
v : Double;
e: Extended;
begin
v := 18.455;
e := 18.455;
ShowMessage(FloatToStr(e-v));
end;
"Обойти" это нельзя, просто надо помнить особенности нецелочисленной
арифметики, и использовать подходящий для задачи тип данных.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-01-13 08:43) [7]
> Джо © (13.01.06 05:22) [3]
> Variant, если я правильно помню, вещественные значения хранит
> как раз в Double.
TVarRec = record
..
vtExtended: (VExtended: PExtended);
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-01-13 08:47) [8]
> remark (13.01.06 05:36) [4]
> Workaround
> v := StrToFloat(FloatToStr(vr));
> Но криво всё это.
Это - да.
Книжечку следует почитать, что-нибудь о численных методах.
--
Regards, LVT.
← →
MBo © (2006-01-13 08:50) [9]http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374
← →
remark (2006-01-13 09:20) [10]Спасибо за помощь всем кто ответил. Признаться я это читал когдато, но почему-то такие очевидные вещи не связял между собой. Теперь всё предельно ясно. Надо будет содателям FastReport задать вопрос.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.074 c