Tow*_*wer 26 php precision phpunit unit-testing assert
我有一个方法返回一个像1.234567890的浮点数.我想测试它确实这样做.但是,似乎这个返回的float在不同平台上具有不同的精度,那么如何断言返回值是1.23456789?如果我这样做:
$this->assertEqual(1.23456789, $float);
Run Code Online (Sandbox Code Playgroud)
那么在某些精度不够的平台上可能会失败.
Ber*_*ner 58
到目前为止,还没有提到assertEquals支持通过提供delta到指定精度来比较浮点数:https: //phpunit.de/manual/current/en/appendixes.assertions.html#appendixes.assertions.assertEquals.example2
$this->assertEquals(1.23456789, $float, '', 0.0001);
Run Code Online (Sandbox Code Playgroud)
小智 5
作为@bernhard-wagner 答案的更新,您现在应该assertEqualsWithDelta()
从 phpunit 7.5 开始使用。
$this->assertEqualsWithDelta(1.23456789, $float, 0.0001);
Run Code Online (Sandbox Code Playgroud)
除了使用 bcmath() 之外,您还可以设置默认精度,如下所示:
ini_set('precision', 14);
Run Code Online (Sandbox Code Playgroud)