Unit testing 有没有办法使用PHPUnit来确保所比较的浮点数完全相等?
例如,以下测试在我的系统上通过,尽管数字不相等Unit testing 有没有办法使用PHPUnit来确保所比较的浮点数完全相等?,unit-testing,floating-point,phpunit,Unit Testing,Floating Point,Phpunit,例如,以下测试在我的系统上通过,尽管数字不相等 $this->assertEquals(17.2222222222000, 17.2222222222999); 有没有办法让PHPUnit即使有一个数字被关闭也不会抛出错误 我的版本是phpunit6.4.3 至于我为什么要尝试获得精确值,我是在测试一个数学单位转换库,精度被认为很重要。您应该能够将增量指定为: 最后一个数字表示您愿意容忍的+/-精度。谢谢。这似乎是我现在配置的方式,PHP处理精度直到大约0.0000000000001为什
$this->assertEquals(17.2222222222000, 17.2222222222999);
有没有办法让PHPUnit即使有一个数字被关闭也不会抛出错误
我的版本是phpunit6.4.3
至于我为什么要尝试获得精确值,我是在测试一个数学单位转换库,精度被认为很重要。您应该能够将增量指定为:
最后一个数字表示您愿意容忍的+/-精度。谢谢。这似乎是我现在配置的方式,PHP处理精度直到大约
0.0000000000001
为什么问题会首先出现,为什么这会解决它?首先,您所参考的文档用“assertEquals(预期浮动$float,实际浮动$float[,字符串$message='',浮动$delta=0])”来描述assertEquals
。我假设“=0”表示delta
的默认值为0。那么,为什么问题中的assertEquals
会允许测试通过,而不是因为差异超过0而报告失败?第二,为什么指定.00000000 1会满足OP的请求,即使有一个数字被关闭,也会抛出一个错误?这似乎允许值相差这个数量。这里的“delta”参数通常被称为epsilon,它是你准备接受的差值的大小。delta为0表示“完全没有差异”,而delta为0.1表示差异高达0.1。即差值的绝对值必须小于或等于ε值。塔德曼:如果这个评论是写给我的,我看不出它是如何回答我的问题的。根据文档,OP的$this->assertEquals(17.22222000,17.22222999)
应该报告一个错误,因为这两个数字的差异大于增量,在这种情况下,增量是默认的零。但是OP的问题是它通过了,他们希望它报告一个错误。那么,首先,它为什么通过了?其次,为什么使增量变大(从零变为非零)会导致assertEquals
报告错误?增加增量会使断言更松散,而不是更严格。
$this->assertEquals(17.2222222222000, 17.2222222222999, '', 0.00000001);