2013-07-23 3 views
3

Моя платежная система занимает 0,5% от каждой транзакции. У меня 0,9 $ на моем счете, очень небольшое количество. И когда я пытаюсь вывести 0,9 $ через API, он дает ошибку, он принимает 0.0045 $ в качестве платы и раундов до 0.91 $. Так что я могу снять только 0,89 $ и заплатить комиссию в размере 0,00445 $, которая округляется до 1 цента, чтобы освободить мою учетную запись;PHP round to precision 2

Я не могу понять, с помощью которого формула дополнительная плата округляется = (

php round(0.9+0.9*0.005,2) 

возвращает $ 0,9, как получить 0,91 $

Edit: CEIL хорошо работает для этой конкретной суммы, но на практике, когда я снимаю только 1 цент, комиссия, которая составляет 0,00005, как-то не рассчитывается как 0,01, выглядит, как и ceil(), включены только первые два нуля после точки. hm ..

ceil ((0.01 * 0.005)) * 100)/100; дает 1 цент, но на самом деле api принимает ноль.

+0

Попробуйте с круглым (($ value) * 100)/100 –

+1

@ IkerVázquez Это не работает – StephenTG

+0

'ceil (($ value) * 100)/100' даст 0.91. Не уверен, даст ли он вам то, что вы хотите в каждом случае, хотя – StephenTG

ответ

5

Как об использовании ceil

$number = 0.9*0.005; 
$number = ceil(100*$number)/100; // rounds fee up to nearest cent 
$number = $number + 0.9; 
echo round($number,2); 
+0

Что возвращает 0.90 – StephenTG

+0

Я улучшил свой ответ. – jh314

+0

+1 теперь, когда он фактически дает правильный результат – StephenTG

0

Не умножали внутри функции CEIL! Вы получите ошибки с плавающей запятой, и это может быть крайне непредсказуемо. Чтобы избежать этого сделать:

function ceiling($value, $precision = 0) { 
    $offset = 0.5; 
    if ($precision !== 0) 
     $offset /= pow(10, $precision); 
    return round($value + $offset, $precision, PHP_ROUND_HALF_DOWN); 
} 

Например ceiling(2.2200001, 2) даст 2.23.