首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >BcdDivide函数在Delphi XE和XE2中的行为不同

BcdDivide函数在Delphi XE和XE2中的行为不同
EN

Stack Overflow用户
提问于 2012-02-03 09:42:49
回答 1查看 1.6K关注 0票数 67

FmtBcd.pas已经在Delphi XE2中进行了广泛的修改和重写。在我的一个项目中,我有一个案例,它对两个Bcd值进行除法运算,但两个版本产生了不同的结果。在最坏的情况下,Delphi XE2可能会抛出Bcd overflow error

示例:在Delphi XE2控制台应用程序中运行以下代码:

var A, B, C, D: TBcd;
begin
  A := StrToBcd('1');
  B := StrToBcd('3');
  BcdDivide(A, B, C);
  WriteLn(BcdToStr(C));

  try
    BcdMultiply(C, C, D);
    WriteLn(BcdToStr(D));
  except
    on E: Exception do
      WriteLn(E.Message);
  end;

  ReadLn;
end.

上面的输出将是:

0.333333333333333333333333333333333333333333333333333333333333333
BCD overflow

变量C包含具有63个小数位的BCD值。在变量C上执行第二个BcdMultiply操作将导致Bcd overflow error

但是,在Delphi XE中运行相同的代码会产生以下结果,而不会出现任何异常提示:

0.3333333333
0.11111111108888888889

谁能推荐一个解决这个问题的最佳实践方法?

EN

回答 1

Stack Overflow用户

发布于 2012-11-27 07:31:36

问题中的代码在XE2 update 4中生成预期的输出。请注意,update 3生成错误的输出,因此很明显,update 4提供了修复。此外,XE3生成预期的输出。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9122646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档