круглый поплавок из микротайма - PullRequest
2 голосов
/ 20 января 2012

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

как это возможно?

1 Ответ

3 голосов
/ 20 января 2012

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

Кроме того, рациональные числа, которые точно представлены в виде чисел с плавающей запятой в базе 10, например 0,1 или 0,7, не имеют точного представления в виде чисел с плавающей запятой в базе 2,который используется внутри, независимо от размера мантиссы.Следовательно, они не могут быть преобразованы в их внутренние двоичные аналоги без небольшой потери точности.Это может привести к сбивающим с толку результатам: например, floor ((0.1 + 0.7) * 10) будет обычно возвращать 7 вместо ожидаемых 8, поскольку внутреннее представление будет примерно таким: 7.9999999999999991118 ....

...