Форумы-->Техническая поддержка-->
Автор | Исчезло 0,1 бриллианта. |
сабж. купил драка сегодня, было 8,2. Драк стоит 2 брюлла, сейчас 6,1? Как так? Мне не жалко, просто поясните почему произошло исчезновение. | Возможно, округление | с чего вдруг? почему тогда не 6 оставили? | ^ | с чего вдруг? почему тогда не 6 оставили? там округление идет до десятых, скорее всего пост 2 прав. | понимаешь, у меня в голове не укладывается после матфака, как получается 8,2-2=6,1? или дракон стоит 2,0...пипецскоканулей..1 и округлилось в нижнюю сторону? 0,2 емнип я получил по акции, и так и не нашел куда их потратить, так они у меня и болтались. Хочу понять механику данного действа ).
И да, если бы округляли до десятых, то зелья не стоили бы 0,5брюлла, а стоили бы полноценно 1. | для Andi_vrn:
у меня в голове не укладывается после матфака
значит ты не знаешь что такое переменная типа Float.
если Админы ее используют, то как раз в ней 2,0...пипецскоканулей..1 | 7+
Числа с плавающей точкой имеют ограниченную точность. Хотя это зависит от операционной системы, в PHP обычно используется формат двойной точности IEEE 754, дающий максимальную относительную ошибку округления порядка 1.11e-16. Неэлементарные арифметические операции могут давать большие ошибки, и, разумеется, необходимо принимать во внимание распространение ошибок при совместном использовании нескольких операций.
Кроме того, рациональные числа, которые могут быть точно представлены в виде чисел с плавающей точкой с основанием 10, например, 0.1 или 0.7, не имеют точного внутреннего представления в качестве чисел с плавающей точкой с основанием 2, вне зависимости от размера мантиссы. Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего вернет 7 вместо ожидаемого 8, так как результат внутреннего представления будет чем-то вроде 7.9999999999999991118....
Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство.
Вот почитай
http://www.php.net/manual/ru/language.types.float.php
п.с.
это не РВС | У вас есть 4.19 бриллиантов. зашел в помощь проекту и увидел куда уплыл 0,1. Действительно округлился вниз.
про плавающую точку не подумал =). Да и не должен ), вообще будучи нубом и тратя игровую валюту еще не хватало задумываться, куда деваются копеечки. Смысл понял. Тему можно крыть. | для Andi_vrn:
Тему можно крыть.Так вчем дело :) Кнопка в низу темы ! | забыл нажать ) еще раз всем спасибо | тема закрыта by Andi_vrn (2014-04-11 10:10:34) |
---|
К списку тем
|