Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Непонятки с типом currency


Автор: v258 11.8.2008, 21:21
Примерно такой код
Код

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

теоретически d должно принимать значение 12, а на самом деле получается 11.88. Почему так? Или я что-то делаю не так?

Автор: Rodman 11.8.2008, 21:26
при делении округляется и в результате получается твое число!

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

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

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

А как избежать? При использовании типа double получается 12, но интересует именно currency, т.к. считаться будут именно деньги.

Автор: v258 12.8.2008, 12:08
Цитата

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 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)