簡體   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