当前位置:  开发笔记 > 编程语言 > 正文

将DUnit CheckEquals中的问题与货币字段值进行比较

如何解决《将DUnitCheckEquals中的问题与货币字段值进行比较》经验,为你挑选了1个好方法。

我正在比较DUnit中的一些货币值,但它在我的机器上根本不起作用(在其他机器上工作,但在我的机器上不工作).

一个例子:

CheckEquals(16.65, SomeCurrencyFieldValue);

举:

expected: <16,65> but was: <16,65>

如果做以下比较然后工作:

var
  Temp: Currency;
begin
  Temp := 16.65;
  CheckEquals(Temp, SomeCurrencyFieldValue);

问题是:当我将值直接传递给CheckEquals方法时,为什么比较不起作用?



1> Rob Kennedy..:

问题与如何在运行时CurrencyExtended值转换为值以及如何Extended在编译时将浮点文字转换为值有关.如果在两种情况下转换都不相同,那么传递给的值CheckEquals可能无法比较相等.

值得在调试器的CPU窗口中检查其中任何一个值是否在准备函数调用的过程中经过中间DoubleExtended.额外的转换会影响结果的确切值.

另一件需要考虑的事情是16.65不能完全表示为一个Extended值,但它可以完全表示为一个Currency值.虽然Currency被归类为浮点类型,但它实际上是一个定点缩放的64位整数.这可能是请求CheckEquals在DUnit中额外过载的理由,并将其考虑在内.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有