Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];

Вниз

Различия 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
15-1202219474
Карелин Артем
2008-02-05 16:51
2008.03.16
Подольск и вокруг него. Где программисты или аналитики нужны?


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


2-1203005847
Ega23
2008-02-14 19:17
2008.03.16
CreateProcess - флаги


2-1203329126
WebSQLNeederr
2008-02-18 13:05
2008.03.16
Перемешать рендомно строки TStringList


2-1203152306
alexsashkan
2008-02-16 11:58
2008.03.16
Проблема с запросом SQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский