繁体   English   中英

PHP 和带有小数的单元测试断言

[英]PHP and unit testing assertions with decimals

我有一个方法可以返回像 1.234567890 这样的浮点数。我想测试它是否真的这样做了。 但是,这个返回的浮点数似乎在不同平台上具有不同的精度,所以我如何断言返回的值为 1.23456789? 如果我只是这样做:

$this->assertEqual(1.23456789, $float);

然后在某些精度不够的平台上可能会失败。

到目前为止,还没有提到 assertEquals 通过提供 delta 来支持比较浮点数来指定精度

$this->assertEquals(1.23456789, $float, '', 0.0001);

感谢@Antoine87指出从 phpunit 7.5 开始,您应该使用assertEqualsWithDelta()

$this->assertEqualsWithDelta(1.23456789, $float, 0.0001);

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

$this->assertEqualsWithDelta(1.23456789, $float, 0.0001);

一般来说,测试内置浮点数是否相等是个坏主意。 由于浮点表示的 准确性问题,两个不同计算的结果在数学上可能完全相等,但在 PHP 运行时比较它们时会有所不同。

解决方案1:比较它们相距多远。 比如说,如果绝对差小于 0.000001,则您将这些值视为相等。

解决方案2:使用任意精度数学,它支持任意大小和精度的数字,表示为字符串。

为了获得更高的准确性,您可以考虑使用BCMath

或者使用 bcmath() 您还可以设置默认精度,如下所示:

ini_set('precision', 14);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM