[英]PHP Type Casting to integer
誰能解釋一下這段代碼中的邏輯嗎?
<?php
echo ((0.1 + 0.7) * 10) .'<br />'; // 8
echo (int) ((0.1 + 0.7) * 10) .'<br />'; // 7 why?
echo ((0.1 + 0.8) * 10) .'<br />'; // 9
echo (int) ((0.1 + 0.8) * 10) .'<br />'; // 9 why ??
?>
從手冊中: http : //php.net/manual/zh/language.types.float.php
警告浮點精度
浮點數的精度有限。 盡管它取決於系統,但PHP通常使用IEEE 754雙精度格式,由於舍入為1.11e-16的順序,它將提供最大的相對誤差。 非基本算術運算可能會產生較大的錯誤,並且,當然,在合並多個運算時必須考慮錯誤傳播。 此外,在底數10中可精確表示為浮點數的有理數(如0.1或0.7)在底數2中沒有作為浮點數的精確表示,內部使用,而不考慮尾數的大小。 因此,如果不損失一點點精度,就不能將它們轉換為內部二進制副本。 這可能導致混亂的結果:例如,floor((0.1 + 0.7)* 10)通常將返回7而不是預期的8,因為內部表示形式將類似於7.9999999999999991118。最后一位,請勿直接比較浮點數是否相等。 如果需要更高的精度,則可以使用任意精度的數學函數和gmp函數。 有關“簡單”的說明,請參見»浮點指南,其標題也為“為什么我的數字不累加?”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.