2012-03-30 4 views
1

Номера, которые извлекаются из файла xml и затем назначаются переменной, но выводятся неправильно. Я не совсем понимаю, почему и как обойти это. Примером является это.PHP round & ceiling неправильно обрабатывает данные

$pricing_high = 1.15; 
echo $pricing_high; 

Это отображает 1.15, очевидно. Но когда я задаю этот так:

$price = ceil($pricing_high/0.05) * 0.05; 
echo $price; 

Показывает 2.

$price = round($pricing_high/0.05) * 0.05; 
echo $price; 

Это показывает 1.

Как получить номера правильно округлить до ближайших 5 центов при прохождении это так?

+0

Оба из них выдадут '1.15'. – MichaelRushton

ответ

2

По PHP документации для функции этапа:

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

Вы можете задать точность в качестве второго параметра:

$pricing_high = 1.15; 
$price = round($pricing_high/0.05, 2) * 0.05; 
echo $price; 

Примечания значения второго параметра 2

+0

Получил его для работы с $ price = round ($ pricing_high/5, 2) * 5; Как я могу заставить его сохранить 0s? Например, вместо отображения 1 будет отображаться 1,00 или от 0,4 до 0,40 –

+0

Nevermind Я получил его :) $ price1 = sprintf ("% 01.2f", $ price); Спасибо за информацию! –

0

Как потолок() и floor() не имеют такой точности, вы можете умножить свои результаты и разделить их после.

1

Is 1.15 = 1 доллар и 15 центов? Если это так:

echo sprintf('%.2f', round($price/0.05) * 0.05); // Rounds to nearest 
echo sprintf('%.2f', ceil($price/0.05) * 0.05); // Rounds up 

Тесты:

$price = 1.13; 

echo sprintf('%.2f', round($price/0.05) * 0.05); // Outputs: 1.15 
echo sprintf('%.2f', ceil($price/0.05) * 0.05); // Outputs: 1.15 

$price = 1.12; 

echo sprintf('%.2f', round($price/0.05) * 0.05); // Outputs: 1.10 
echo sprintf('%.2f', ceil($price/0.05) * 0.05); // Outputs: 1.15 

Если 1.15 = 1,15 цента, то заменить 0.05 с 5.

Смежные вопросы