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

Вниз

Различия VarCast varCurrency -> varSingle, varCurrency->varDouble   Найти похожие ветки 

 
Skyle ©   (2008-02-19 07:15) [0]

Пишем простенький тестовый пример, D5.

var
 V, V1, V2 : Variant;
begin
 V := 723.54;
 VarCast(V1, V, varSingle);
 VarCast(V2, V, varDouble);
 ShowMessage(VarToStr(V1)); //тут точка останова
end;


Ставим breakpoint на указанную строку, идём в WatchList, добавляем
TVarData(V).vCurrency (видим 723.54)
TVarData(V2).vDouble (видим те же 723.54)
TVarData(V1).vSingle (а вот тут видим 723.53997803)

Да, VarToStr(V1) даёт "723.54", но если это выдать в Excel или vbs, то там виден весь мусор.

Статью Григорьева про особенности я читал, но видимо тут дело в какой-то внутренней обработке вариантов именно в D5. В хелпе написано, что при "Variant type conversions" из real в real происходит "converts real formats", описания которого я не нашёл.

Что я упускаю, почему в Single такой результат?


 
sniknik ©   (2008-02-19 08:28) [1]

> Да, VarToStr(V1) даёт "723.54"
с чего это? также будет со всем мусором.

> но если это выдать в Excel или vbs
и настроить формат отображения на 2 знака после запятой, то мусора не будет... или передать более "корректным" типом, или даже строкой чтобы он сам сконвертировал в свой "Double" - тоже не будет.

> Что я упускаю, почему в Single такой результат?
статью прочитал "по диагонали", не думая. смысл ее упустил.


 
Skyle ©   (2008-02-19 08:55) [2]


> sniknik ©   (19.02.08 08:28) [1]
> > Да, VarToStr(V1) даёт "723.54"
> с чего это? также будет со всем мусором.

Эксперимент показывает что нет. Последняя строка примера. Покажет без мусора.


> > но если это выдать в Excel или vbs
> и настроить формат отображения на 2 знака после запятой,
>  то мусора не будет... или передать более "корректным" типом,
>  или даже строкой чтобы он сам сконвертировал в свой "Double"
> - тоже не будет.

Если в екселе настроить отображение, то будет отображаться два знака. Но значение в ячейке будет с мусором.


>
> > Что я упускаю, почему в Single такой результат?
> статью прочитал "по диагонали", не думая. смысл ее упустил.
>

Может быть и по диагонали, но я так и не понял, в чём разница между Single и Double в случае конечных двоичных дробей.


 
Григорьев Антон ©   (2008-02-19 09:23) [3]


> Skyle ©   (19.02.08 08:55) [2]
> Эксперимент показывает что нет. Последняя строка примера.
>  Покажет без мусора.

"Покажет без мусора" и "не будет содержать мусора" - разные вещи. Когда мусор слишком мал, при преобразовании числа в строку он отбрасывается. Но это не значит, что его там вообще нет.

> я так и не понял, в чём разница между Single и Double в
> случае конечных двоичных дробей

В количестве разрядов и, как следствие, величине мусора.


 
Skyle ©   (2008-02-19 09:30) [4]


> Григорьев Антон ©   (19.02.08 09:23) [3]

Похоже мне не надо было думать что число 723 слишком маленькое для того, чтобы появились проблемы у Single, а просто разложить его и посмотреть.

Ладно, всем спасибо, вопрос похоже исчерпан.


 
sniknik ©   (2008-02-19 11:13) [5]

> Эксперимент показывает что нет. Последняя строка примера. Покажет без мусора.
нет возможности попробовать в D5, но в D7 ShowMessage(VarToStr(V1)) показывает как раз с "мусором".

а вот в окне просмотра в IDE округляет до 2 знаков.



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
15-1202144713
ProgRAMmer Dimonych
2008-02-04 20:05
2008.03.16
Нужна помощь в выборе программы


2-1203317888
ryden
2008-02-18 09:58
2008.03.16
Как поместь форму в dll


2-1203394543
Skyle
2008-02-19 07:15
2008.03.16
Различия VarCast varCurrency -> varSingle, varCurrency->varDouble


2-1203347003
savyhinst
2008-02-18 18:03
2008.03.16
CGI


6-1182163971
Makhanev Alexander
2007-06-18 14:52
2008.03.16
Как достать запрашиваемый URL из GET (http) ?