PHP和单元测试断言带小数

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)

  • 我认为您的意思是$ this-> assertEquals(1.23456789,$ float,'',0.0001); 注意额外的s。 (2认同)
  • 喜欢简单的解决方案。这应该是公认的。接受的解决方案会让我在BCMath中挖掘一个小时。 (2认同)

小智 5

作为@bernhard-wagner 答案的更新,您现在应该assertEqualsWithDelta() 从 phpunit 7.5 开始使用。

$this->assertEqualsWithDelta(1.23456789, $float, 0.0001);
Run Code Online (Sandbox Code Playgroud)


Ali*_*xel 0

除了使用 bcmath() 之外,您还可以设置默认精度,如下所示:

ini_set('precision', 14);
Run Code Online (Sandbox Code Playgroud)