为什么BcdPrecision返回由BcdScale扣除的值?

时间:2015-03-27 02:14:26

标签: delphi

在单位Data.FmtBcd.pas中,BcdPrecisionBcdScale函数定义为:

function BcdPrecision(const Bcd: TBcd): Word;
begin
  Result := Bcd.Precision - BcdScale(Bcd);
end;

function BcdScale(const Bcd: TBcd): Word;
begin
  Result := (Bcd.SignSpecialPlaces and 63);
end;

TBcd声明为:

TBcd  = record
  Precision: Byte;                        { 1..64 }
  SignSpecialPlaces: Byte;                { Sign:1, Special:1, Places:6 }
  Fraction: packed array [0..31] of Byte; { BCD Nibbles, 00..99 per Byte, high Nibble 1st }
end;

执行以下代码会导致错误:

var
  B, B1: TBcd;
  i1, i2: integer;
begin
  B := 530;
  i1 := BCDPrecision(B);    // return 3
  i2 := BCDScale(B);        // return 1
  Assert(NormalizeBcd(B, B1, i1, i2));
end;

BCDPrecision(B)返回3B.Precision - 1),从而导致错误。

如果BCDPrecision(B)返回4,那么它不会导致错误。为什么BCDPrecision的实施会被BCDScale扣除而不会返回TBcd.Precision

0 个答案:

没有答案