PHP игнорирует цифры справа от десятичной точки в уравнении - PullRequest
1 голос
/ 18 июля 2011

У меня есть переменная $x, значение которой считывается из файла XML. Значение, читаемое из XML, составляет 1,963788, ни больше, ни меньше. Когда я вывожу $x, я вижу, что значение в $x на самом деле 1.963788. С миром все в порядке.

Но тогда, когда я использую x в уравнении, таком как

$pl = $x*125.0-200.0;

Значение $pl в конечном итоге равно -75. По какой-то причине PHP, похоже, игнорирует или просто избавляется от цифр справа от десятичной точки в $x, что делает $x знаком 1. Я подумал, что в аду был шанс, что снежный ком произошло и на других языках, поэтому я написал это на C ++, и, к большому удивлению, я получил правильный ответ 45.4735.

Кто-нибудь когда-либо сталкивался с этим раньше или знает, что происходит? Спасибо.

Ответы [ 4 ]

1 голос
/ 18 июля 2011

Ваш номер, по-видимому, не смог разыграть как число с плавающей точкой. Если я использую «1,963788», я получу ваш результат. Если я использую '2,963788', я получаю результат 50. Согласно документации PHP для intval (и это то, что кажется PHP пытается преобразовать это как целое число) Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of integer casting apply.

Тщательно проверьте значение $ x. Возможно, это не то, что вы ожидаете, поскольку PHP, похоже, не согласен с тем, что это на самом деле float, или он напечатал бы его таким образом.

1 голос
/ 18 июля 2011

Вероятно, это связано с тем, что $x интерпретируется как строка и преобразуется в целое число, а не в число с плавающей запятой.

Попробуйте:

$pl = (float) $x * 125.0 - 200.0;
1 голос
/ 18 июля 2011

Вы пытались использовать floatval ?Возможно, PHP интерпретирует ваше число как строку, и стандартное преобразование просто преобразует его в целое число.

0 голосов
/ 18 июля 2011

Непосредственно перед тем, как вычислить $pl, выполните var_dump для $x, чтобы увидеть, какое фактическое значение хранится в нем.Я попробовал ваш код, и он возвращает правильное значение 45.4735, поэтому я не могу быть ошибкой PHP.

...