3

我在 SQL Server 中运行一个返回一些计算值的函数。当使用 dbFit 在 FitNesse 中测试结果时,它声称这些值不一样(请参见下面的屏幕截图)。

这些值作为浮点数返回,并且在比较所有小数时失败 - 即使它只显示两个。有没有办法限制比较的小数范围?

不匹配的 FitNesse 值

4

1 回答 1

3

您永远不应该比较浮点数,至少不应该严格比较。那是因为二进制系统的缺陷。

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

于 2012-09-26T08:02:21.060 回答