簡體   English   中英

PHP類型轉換為整數

[英]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函數。 有關“簡單”的說明,請參見»浮點指南,其標題也為“為什么我的數字不累加?”。

如果將浮點數轉換為整數,則輸出將是小數點前的數字。 意味着如果將10.9為整數,則輸出將為10

您還應該引用這些函數ceil()floor()round()

有關更多詳細信息,另請參見下面的鏈接,

PHP浮到int類型強制轉換的意外結果

希望它能對您有所幫助:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM