delphi – 将DUnit CheckEquals中的问题与货币字段值进行比较
发布时间:2020-12-15 04:19:47 所属栏目:大数据 来源:网络整理
导读:我正在比较DUnit中的一些货币值,但它在我的机器上根本不起作用(在其他机器上工作,但不在我的机器上). 一个例子: CheckEquals(16.65,SomeCurrencyFieldValue); 举: expected: 16,65 but was: 16,65 如果做以下比较然后工作: var Temp: Currency;begin Temp
我正在比较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重载的理由,并将其考虑在内. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |