Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Delphi – 比较两个“Real”数字变量大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我对“Real”类型的两个变量的比较有问题.一个是数学运算的结果,存储在数据集中,第二个是表单中的编辑字段的值,由StrToFloat转换并存储到“Real”变量.问题是这样的

正如你所看到的,程序试图告诉我,121,97不等于121,97 ……我已经读过了
this topic,我并不完全确定,这是同样的问题.如果是,则不会将变量中存储的数字都作为完全相同的最接近可表示的数字,对于121.97是121.96999 99999 99998 86313 16227 83839 70260 62011 71875?

现在让我们说它们不会存储为最接近的可表示数字.我怎样才能找到它们的存储方式?当我查看“CPU”调试窗口时,我完全迷失了.我看到地址,那些值应该是,但没有什么甚至类似于一些二进制,十六进制或实际数字的任何表示…我承认,高级调试对我来说是未知的宇宙……

编辑:
这两个值确实略有不同.

好的,我不需要了解一切.然我没有处理金钱,但最多会有3位小数,所以“货币”就是出路

便说一句:计算方法是:

DATA[i].Meta.UnUsedamount := DATA[i].amouNT - ObjQuery.FieldByName('USED').AsFloat;

在这种情况下,它是3695 – 3573.03

解决方法

由于未知原因,您无法在监视列表中将浮点值(单/双或实数48)视为十六进制.

但是,您仍然可以通过将其视为内存转储来查看十六进制表示.
这是如何做:
将变量添加到监视列表.
右键单击手表 – >编辑观看…
将其视为内存转储

现在,您可以比较调试器中的两个值.

永远不要使用浮动货币金额
你当然知道你不应该使用花车数钱.
你会因为舍入而遇到各种各样的麻烦,比较也不会按照你想要的方式运行.
如果您想使用货币,请使用货币类型.它没有这些问题,支持4位小数,可以使用=运算符进行比较,没有舍入问题.

在数据库中,您使用货币或货币数据类型.

大佬总结

以上是大佬教程为你收集整理的Delphi – 比较两个“Real”数字变量全部内容,希望文章能够帮你解决Delphi – 比较两个“Real”数字变量所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。