Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 有没有办法使用PHPUnit来确保所比较的浮点数完全相等?_Unit Testing_Floating Point_Phpunit - Fatal编程技术网

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);