PHP: интересное поведение сложения чисел типа float
Был немножно удивлен сегодня, когда пытался сложить два числа типа float обычным оператором +. Например сложение чисел вида 59.86601 + 0,01 успешно выполнялось, а 59.86601+0,001 уже нет. Т.е. результирующее число оставалось прежним. Оказывается для точного сложения чисел, в PHP нужно использовать специальные операторы:
1 2 3 4 5 6 7 8 9 10 |
bcadd — Сложить 2 числа произвольной точности bccomp — Сравнение двух чисел произвольной точности bcdiv — Операция деления для чисел произвольной точности bcmod — Получает остаток от деления чисел с произвольной точностью bcmul — Умножение двух чисел с произвольной точностью bcpow — Возведение в степень чисел с произвольной точностью bcpowmod — Возводит одно число в степень другого и возвращает остаток от деления результата на третье число bcscale — Задает количество чисел после десятичной точки по умолчанию для всех bc math функций. bcsqrt — Извлекает квадратный корень из числа с произвольной точностью bcsub — Вычитает одно число с произвольной точностью из другого |
Например:
1 |
$point2["lat"]=Bcadd($point2["lat"],$cnt,8); |