2

PHPバージョン5.3.6

<?php
$timeStart = microtime(true);
// some code ...    
$timeExecution = microtime(true) - $timeStart;
$time = round($timeExecution, 2);
file_put_contents('h:/round.txt', $timeExecution . ' = ' . $time . "\n", FILE_APPEND);
?>

ファイルround.txtには、次の行が含まれています。

131.3048491477966 = 131.3

8.340715885162354 = 8.34

8.198318004608154 = 8.199999999999999

そんなことがあるものか?

4

1 に答える 1

3

http://php.net/manual/en/language.types.float.php

さらに、0.1や0.7のように、基数10の浮動小数点数として正確に表現できる有理数は、仮数のサイズに関係なく、内部で使用される基数2の浮動小数点数として正確に表現されません。したがって、精度を少し損なうことなく、対応する内部バイナリに変換することはできません。これは混乱を招く結果につながる可能性があります。たとえば、floor((0.1 + 0.7)* 10)は通常、期待される8ではなく7を返します。これは、内部表現が7.9999999999999991118 ...のようになるためです。

于 2012-01-20T19:59:48.320 に答える