PHP, Как окружить правильно?

Возможный Дубликат:
Математическая точность PHP

Это - очень простое округление числа, но по некоторым причинам это принимает решение проигнорировать последнюю цифру вместо того, чтобы окружить правильно.

$number = 4886.94 * 1.25;
$number = round($number,2);
echo "Test: ".$number."
";

Общее количество 6108.675, но оно округляет в меньшую сторону к.67, а не.68.

Но если я выписываю его, непосредственно любит это:

$number = 6108.675;
$number = round($number,2);
echo "Test: ".$number."
";

Это теперь окружает к.68 правильно.

Что я пропускаю?

Обновление:

Это - несомненно, "хакерское проникновение", но увы...

$number = substr($number,0,strpos($number,".")+4);   
$number = round($number,2);

Это дает мне 3 цифры, которые я могу окружить правильно.

1
nl ja de

3 ответы

Вы получаете различные результаты, потому что (насколько PHP затронут) у вас есть различные числа:

<?php
ini_set('precision', 20);
var_dump( 4886.94 * 1.25 );
var_dump( 6108.675 );

...

float(6108.6749999999992724)
float(6108.6750000000001819)

That's how computers work ;-)

10
добавлено
Я предполагаю, что downvote для того, чтобы не связывать страницу руководства для раунда ():-?
добавлено автор Álvaro González, источник
Да, вы выбрали плохой день, чтобы бросить курить:)
добавлено автор Álvaro González, источник
ini_set лучше, чем тысяча слов, браво
добавлено автор pocesar, источник
Это, конечно, объясняет все, но также и делает мою жизнь несколько более неприятным heh. Спасибо:)
добавлено автор user1934039, источник

http://php.net/manual/en/function.round.php

The third parameter. You need to use PHP_ROUND_HALF_UP

Продукция:

php > $num = 4886.94 * 1.25;
php > $new_num = round($num, 2, PHP_ROUND_HALF_UP);
php > echo $new_num . PHP_EOL;
6108.68
php > 

На PHP 5.4.6

4
добавлено
@Lukx, отметьте журнал изменений в нижней части страницы справочника - способ param новый, так , HALF_UP только был бы дефолтом, начинающимся в 5.3 и позже. Поведение до этого не определяется для более ранних версий, это кажется.
добавлено автор Charles, источник
Я верю it' s дефолт так или иначе, согласно вашей связи?
добавлено автор Lukx, источник
@Charles: Это правильно. Однако, хотя не действительно representive, мой company' s PHP 5.2 Основываются на Debian (производственное использование) действительно ведет себя, как будто на самом деле используемый способ был HALF_UP .
добавлено автор Lukx, источник
чтение руководства для победы
добавлено автор user557846, источник
Lukx правилен. Какая версия PHP вы используете OP? в 5.4.6 я получаю ответ you' поиск ре, не добавляя третий param.
добавлено автор David Harris, источник
Всем большое спасибо. К сожалению, я использую версию 5.2.17.
добавлено автор user1934039, источник

Можно использовать как это -

<?php
echo round(9.5, 0, PHP_ROUND_HALF_UP);  //10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN);//9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN);//10
echo round(9.5, 0, PHP_ROUND_HALF_ODD); //9

echo round(8.5, 0, PHP_ROUND_HALF_UP);  //9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN);//8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN);//8
echo round(8.5, 0, PHP_ROUND_HALF_ODD); //9
?> 

Дополнительно PHP обеспечивают, функция любят, перекрывают() и пол ();

1
добавлено
действительно ли это - паста копии
добавлено автор Jonathan de M., источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp