PHP самая низкая общая деноминация - PullRequest
0 голосов
/ 21 мая 2018

Я работаю над платежным шлюзом, и параметр суммы необходимо отформатировать следующим образом:
amount – (digits only) the integer value of the transaction in lowest common denomination (ex. $5.20 is 520)
Я уже удалил $, и все значения будут округлены до 2 десятичных знаков.

В PHP, если я попытаюсь разыграть сумму как int, то есть (int)$amount, я потеряю .20 в примере, хотя это необходимо.Что может быть лучшим способом для этого?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Если вы не уверены в количестве десятичных разрядов, вы можете использовать регулярные выражения для удаления нецифровых значений из вашей строки.

echo preg_replace('~\D+~', '', $amount);

\D означает любое нечисловой символ+ означает один или несколько.

Если значение необходимо преобразовать как целое число (а не строку), напишите (int) непосредственно перед preg_replace.

Конечно, вы можете использовать str_replace() и нацеливать известные символы, такие как: $ и .-, если он может существовать).


Через некоторое времяобратная связь от OP ...

Вы можете округлить и отформатировать за один шаг с number_format().

Код: (Демо: https://3v4l.org/ir54s)

$amounts = array(0.001, 0.005, 5.20, 5.195, 5.204, 5);
foreach ($amounts as $amount) {
    echo  $amount , "->" , (int)number_format($amount, 2, '', '')."\n";
}

Вывод:

0.001->0
0.005->1
5.2->520
5.195->520
5.204->520
5->500
0 голосов
/ 21 мая 2018

Вы можете умножить сумму на 100 и затем преобразовать ее ...

$amount = (int)($amount*100);

Таким образом, 5.20 становится 520.

...