Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятки с типом currency, Что я делаю не так? 
V
    Опции темы
v258
Дата 11.8.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 19.7.2005
Где: Краснодарский кра й

Репутация: 2
Всего: 2



Примерно такой код
Код

var
  c,d: currency
begin
  c := 12.0;
  c := c / 3600;
  d := c * 3600;
end;

теоретически d должно принимать значение 12, а на самом деле получается 11.88. Почему так? Или я что-то делаю не так?
PM MAIL WWW   Вверх
Rodman
Дата 11.8.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



при делении округляется и в результате получается твое число!

Добавлено через 46 секунд
Код

var
  c:Double;
  d: currency;
begin
  c := 12.0;
  c := c / 3600;
  ShowMessage(CurrToStr(c));
  d := c * 3600;
  ShowMessage(CurrToStr(d));
end;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
v258
Дата 11.8.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 19.7.2005
Где: Краснодарский кра й

Репутация: 2
Всего: 2



Цитата(Rodman @  11.8.2008,  21:26 Найти цитируемый пост)
при делении округляется и в результате получается твое число

А как избежать? При использовании типа double получается 12, но интересует именно currency, т.к. считаться будут именно деньги.
PM MAIL WWW   Вверх
v258
Дата 12.8.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 19.7.2005
Где: Краснодарский кра й

Репутация: 2
Всего: 2



Цитата

Currency is a fixed-point data type that minimizes rounding errors in monetary calculations. On the Win32 platform, it is stored as a scaled 64-bit integer with the four least significant digits implicitly representing decimal places. When mixed with other real types in assignments and expressions, Currency values are automatically divided or multiplied by 10000. 

Четыре значащих цифры - да, придется-таки double использовать  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1115 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.