微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

一个例子:

CheckEquals(16.65,SomeCurrencyFieldValue);

举:

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

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

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

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

解决方法

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

值得在调试器的cpu窗口中检查在为函数调用做准备时,其中任何一个值是否经过Extended的中间Double值.额外的转换会影响结果的确切值.

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

原文地址:https://www.jb51.cc/delphi/101815.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐