Мне нужна помощь. Я делаю это:PHP Round() не работает должным образом
round($myvar,2);
И это число я получаю: +9,779999999999999 €
С другими переменными она работает просто отлично, любая идея, как это исправить?
Мне нужна помощь. Я делаю это:PHP Round() не работает должным образом
round($myvar,2);
И это число я получаю: +9,779999999999999 €
С другими переменными она работает просто отлично, любая идея, как это исправить?
Я сделал это:
<?php echo round(9.7752,2);?>
И я получил: +9,779999999999999
Я считаю, что это что-то в php.ini, как сказал @MarkBaker .. Но, я установил ее, выполнив:
<?php echo number_format($myvar,2);
И я получил именно то, что хотел. Спасибо, ребята, за помощь!
'ini_set (« precision », 12);' также должно работать, редактирование php.ini облегчило бы это. –
Это похоже на нормальную [неточность с плавающей запятой] (http://stackoverflow.com/questions/3726721/php- math-precision) мне ... –
Хорошо, спасибо за помощь, в следующий раз я буду знать, что делать, исправил (Y) –
Хотя ОП решил свою проблему, я увидел это во время поиска другой (но аналогичной) проблемы.
Если вы пришли сюда с проблемой, где round()
функция PHP является обнаружено нарушение (т.е. round(1.4447, 2)
будет выводить 1.44
вместо 1.45
), что это потому, что круглый выглядит 1 положение десятичной от необходимой точности, вот небольшой рекурсивную вспомогательную функцию, которая решает вопрос:
function roundFloat($float, $neededPrecision, $startAt = 7)
{
if ($neededPrecision < $startAt) {
$startAt--;
$newFloat = round($float, $startAt);
return roundFloat($newFloat, $neededPrecision, $startAt);
}
return $float;
}
пример использования:
roundFloat(1.4447, 2, 5); // Returns 1.45
Объяснение:
0
) в этом случае, так как не указано иное.roundFloat(1.4447, 2, 15)
с таким же результатом для данного поплавка 1.4447
.$startAt
только определяет начальную точку для «процесса округления» или требуемой точности.Примечание: все языки программирования имеют проблемы с написанием некоторых поплавков точно (имеет отношение к двоичному, google, что для получения дополнительной информации).
Надеюсь, это поможет кому-то.
'round (1.4447, 2)' -should- return 1.44; то есть ближайший 2-десятичный разрядный поплавок. –
Что еще вы делаете после округления? Как вы показываете это значение? –
'round ($ myvar, 2)' не производит никакого вывода, возможно, вы делаете какие-то 'echo' или' print', покажите нам полный код –
Я просто использую echo ... Php echo round ($ R_ganhoComercial, 2); ?> –