大佬教程收集整理的这篇文章主要介绍了asp.net – 检查.NET中两个双精度相等的问题 – 这个方法有什么问题?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我要在这里粘贴的函数的目标是将两个double值与4位精度值进行比较并返回比较结果.为了便于说明,我的价值观是:
Dim double1 As Double = 0.14625000000000002 ' The result of a calculation Dim double2 As Double = 0.14625 ' A value that was looked up in a DB
如果我将它们传递给这个函数:
Public Shared Function AreEqual(ByVal double1 As Double,ByVal double2 As DoublE) As Boolean Return (CType(double1 * 10000,Long) = CType(double2 * 10000,Long)) End Function
比较失败了.在乘法并转换为Long之后,比较结果为:
Return 1463 = 1462
我在这里回答了我自己的问题,但是我可以看到double1在双精度(17位数)内,并且强制转换正常.
我的第一个真正的问题是:如果我将上面的行改为以下行,为什么它能正常工作(返回TruE)?
Return (CType(CType(double1,decimal) * 10000,Long) = _ CType(CType(double2,Long))
decimal不具有更高的精度,因此对Long的强制转换仍应为1463,并且比较返回false?我想我对这个东西有一个大脑放屁……
其次,如果要更改此功能以进行比较我正在寻找更准确或更不@R_274_10197@,您会建议将其更改为更简单的东西吗?例如:
Return (Math.Abs(double1 - double2) < 0.0001)
我会疯狂尝试类似的东西:
Return (double1.ToString("N5").Equals(double2.ToString("N5")))
(我绝不会做上述事情,我只是对你的反应感到好奇.在我的申请中,它会非常低效.)
无论如何,如果有人能够对我在看到双打和小数到长期之间看到的差异有所了解,那就太棒了.
谢谢!
以上是大佬教程为你收集整理的asp.net – 检查.NET中两个双精度相等的问题 – 这个方法有什么问题?全部内容,希望文章能够帮你解决asp.net – 检查.NET中两个双精度相等的问题 – 这个方法有什么问题?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。