2

PHP Version 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

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

+0

Вы можете чаще всего начинать исследования по википедии: http://en.wikipedia.org/wiki/Floating_point - но не верьте тому, что там сказано. Вместо этого следуйте рекомендациям книги и прочитайте следующие книги. Также вас может заинтересовать семейство функций 'sprintf' /' fprintf'/'printf'. – hakre

ответ

3

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

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

Смежные вопросы