Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Деление единицы на double


Автор: night00 29.10.2011, 13:48
Здравствуйте.

Проблема. При делении 1 / 29,8977 php даёт неверный ответ 0.03448
Если делать другими методами (например, windows калькулятором), выдаётся правильное значение 0.03344

В чём может быть проблема и почему такое получается?

Спасибо за ответы.

Автор: $дмитрий 29.10.2011, 14:51
У меня результат одинаков в php 5.3 и calc 0.033447388929583

Автор: night00 29.10.2011, 16:02
Код

$a = 1 / 29,8977;
echo round($a, 5);


Упорно выводит 0.03448

Автор: bars80080 29.10.2011, 21:01
ясен пень, $a = 1 / 29,8977 даст 0.03448 и в пхп и в калькуляторе. если ты конечно сумеешь загнать запятую в калькулятор

подели 1/29

Автор: SelenIT 29.10.2011, 23:39
Опаньки, а как оно так лихо без parse error выполняется? У меня прокатило, только после оборачивания '29,8977' в строку...

Автор: Absinthe 30.10.2011, 12:42
SelenIT, я, кстати, удивлен, что там Parse error. Считал, что это нормальный синтаксис, аналогичный $a = 1 / 29;8977;
Вот только в документации не могу найти страницу, описывающую использование ",".

Автор: SelenIT 30.10.2011, 19:45
Мне удалось найти лишь http://www.php.net/manual/ru/language.expressions.php#90327.

Но всё же интересно, как топикстартер умудрился заставить сабжевый пример работать...

Автор: ksnk 30.10.2011, 21:16
Цитата(SelenIT @  30.10.2011,  19:45 Найти цитируемый пост)
Но всё же интересно, как топикстартер умудрился заставить сабжевый пример работать... 

imho, был написан калькулятор. Числа с запятой вводились в поля формы... Так довольно несложно напороться на такую проблему. 

Автор: bars80080 30.10.2011, 22:04
Цитата(SelenIT @  30.10.2011,  19:45 Найти цитируемый пост)
Но всё же интересно, как топикстартер умудрился заставить сабжевый пример работать... 

может банально он просто не договорил. на самом деле у него число может проходить сквозь floatval()

Автор: Absinthe 30.10.2011, 22:12
Цитата

Мне удалось найти лишь в комментах.
 Кстати не советую искать в русской доке. Она года как 3 не существует, т.к. разработчики разумно решили "лучше никакой доки, чем неправильная".

Цитата

Each of the expressions can be empty or contain multiple expressions separated by commas.
 Впринципе раз других упоминаний нет, то все понятно.

Автор: SelenIT 30.10.2011, 23:03
Цитата(ksnk @  30.10.2011,  21:16 Найти цитируемый пост)
Числа с запятой вводились в поля формы...

Я думал аналогично. Но в третьем посте темы вроде как приведен конкретный код...

Автор: ksnk 30.10.2011, 23:56
SelenIT, Приведенные код никак не может быть исполнен на стандартном PHP. 

Кстати, еще один потенциальный источник - PHP как скриптовый язык некоего приложения, мало ли кто там чего накрутил. К примеру, переопределил стандартную реакцию на ошибку парсинга...

В общем - пусть топикстартер раскажет откуда дровишки?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)