Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1137245281
49 Cent
2006-01-14 16:28
2006.01.29
Добавить значение в таблицу.


2-1137081654
g.town
2006-01-12 19:00
2006.01.29
dbgrid


15-1135593524
psa247
2005-12-26 13:38
2006.01.29
Error open *.dfm !


15-1136788154
Silver__Dragon
2006-01-09 09:29
2006.01.29
перевод из типа Integer в Word


1-1135510556
Мастер Ломастер
2005-12-25 14:35
2006.01.29
Помогите написать функцию создания класса!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский