Добавление целого числа в число с плавающей точкой в ​​PHP округляет число с плавающей запятой до 1 десятичного знака - PullRequest
5 голосов
/ 19 октября 2010

Например, у меня есть эта строка кода:

echo 10359023529 + 0.2137582935;

Почему это возвращается:

10359023529,2

вместо:

10359023529,2137582935

Ответы [ 3 ]

5 голосов
/ 19 октября 2010

Использование: bcadd()

echo bcadd(10359023529, 0.2137582935, 10);
3 голосов
/ 19 октября 2010

Это ограничение значения с плавающей запятой.Значение с плавающей запятой сохраняется как коэффициент и показатель степени.У вас будет много точности с небольшими числами и низкая точность с большими числами.Вот более подробная информация, чем вы хотели бы: http://en.wikipedia.org/wiki/IEEE_754-2008

Итог: высокие значения будут очень неточными.Попробуйте использовать небольшой диапазон значений.

Подробнее о точности с плавающей запятой, особенно в отношении PHP: http://php.net/manual/en/language.types.float.php

Если вам действительно нужна высокая точность и большие числа, посмотрите на математику BC(http://www.php.net/manual/en/ref.bc.php) и GMP (http://www.php.net/manual/en/ref.gmp.php).

1 голос
/ 19 октября 2010

В php.ini есть неясная опция, определяющая, сколько значащих цифр следует отображать при печати чисел с плавающей запятой.В моем случае это выглядит следующим образом

; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 14

Конечно, это касается только форматирования, а не фундаментального факта, что числа с плавающей запятой изначально неточны.Согласно IEEE 754 точность двойных составляет 15,95 десятичных цифр.

...