我在 SQL Server 中运行一个返回一些计算值的函数。当使用 dbFit 在 FitNesse 中测试结果时,它声称这些值不一样(请参见下面的屏幕截图)。
这些值作为浮点数返回,并且在比较所有小数时失败 - 即使它只显示两个。有没有办法限制比较的小数范围?
我在 SQL Server 中运行一个返回一些计算值的函数。当使用 dbFit 在 FitNesse 中测试结果时,它声称这些值不一样(请参见下面的屏幕截图)。
这些值作为浮点数返回,并且在比较所有小数时失败 - 即使它只显示两个。有没有办法限制比较的小数范围?
您永远不应该比较浮点数,至少不应该严格比较。那是因为二进制系统的缺陷。
float a = 0.15 + 0.15
float b = 0.1 + 0.2
if(a == b) // can be false!
if(a >= b) // can also be false!
由于实数中的有效数字是有限的,我们不能完美地存储实数。几乎总是有错误。尝试用二进制写 0.1!我们在屏幕上看到的 0.1 实际上只是一个近似值。这是一个广泛的主题,您可能想进入数值分析以获取详细信息。
在更一般的说明中,您可以在此处找到一些信息:http ://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
至于你的问题:
您应该使用 ~= (大约相等)。您可以在这里找到更多信息:http: //fitnesse.org/FitNesse.UserGuide.SliM.ValueComparisons