echo (int)((0.1+0.7)*10);
В результате выводит 7.
Почему?
echo (int)((0.1+0.7)*10);
echo (int)((0.11+0.7)*10);
echo (int)((0.1+0.8)*10);
Цитата (SuccessLord @ 4.05.2014 - 19:11) |
Или здесь другие правила? |
Цитата |
Когда человек начинает что-то учить, то пунктом №1 он должен почитать мануал... |
Цитата |
Числа с плавающей точкой имеют ограниченную точность. Хотя это зависит от операционной системы, в PHP обычно используется формат двойной точности IEEE 754, дающий максимальную относительную ошибку округления порядка 1.11e-16. Неэлементарные арифметические операции могут давать большие ошибки, и, разумеется, необходимо принимать во внимание распространение ошибок при совместном использовании нескольких операций. |
Цитата (SuccessLord @ 6.05.2014 - 22:43) |
А упрекать в том, что кто-то что-то должен сделать... |
Цитата (YVSIK @ 7.05.2014 - 01:36) |
Ща я тебя к себе буду переманивать, бушь моим учеником, назло всем,, |
Цитата (YVSIK @ 7.05.2014 - 00:59) |
вот и ответ: php о плавюащих числах с точкой http://www.php.net/manual/ru/language.types.float.php И точное описание |
Цитата (sergeiss @ 7.05.2014 - 01:41) |
еще 4-мая инпост дал эту ссылку... |
Цитата (SuccessLord @ 6.05.2014 - 22:43) |
А упрекать в том, что кто-то что-то должен сделать... |
Цитата |
Запись в форме с плавающей запятой похожа на запись чисел в стандартном виде, но мантисса и экспонента записываются раздельно. Мантисса записывается в нормализованном формате — с фиксированной запятой, подразумеваемой после первой значащей цифры. Возвращаясь к примеру с Ио́, запись в форме с плавающей запятой будет 1528535047 с показателем 5. Это означает, что записанное число в 105 раз больше числа 1,528535047, то есть для получения подразумеваемого числа запятая сдвигается на 5 разрядов вправо. Однако, запись в форме с плавающей запятой используется в основном в электронном представлении чисел, при котором используется основание системы счисления 2, а не 10. Кроме того, в двоичной записи мантисса обычно денормализована, то есть запятая подразумевается до первой цифры, а не после, и целой части вообще не имеется в виду — так появляется возможность и значение 0 сохранить естественным образом. Таким образом, десятичная 9 в двоичном представлении с плавающей запятой будет записана как мантисса +1001000…0 и показатель +0…0100. Отсюда, например, беды с двоичным представлением чисел типа одной десятой (0,1), для которой двоичное представление мантиссы оказывается периодической двоичной дробью — по аналогии с 1/3, которую нельзя конечным количеством цифр записать в десятичной системе счисления. |