PHP最低的共同面额

时间:2018-05-21 06:49:10

标签: php html opencart

我正在使用支付网关,金额参数需要以这种方式格式化:
 IBusControl busControl = CreateBus(); TaskUtil.Await(() => busControl.StartAsync()); IRequestClient<IAccountingRequest, IAccountingResponse> client = CreateRequestClient(busControl); IAccountingResponse response = null; AccountingRequest accountingRequest = MapToAccountingRequest(accountingIntegration); Task.Run(async () => { response = await client.Request(accountingRequest); }).Wait(); busControl.Stop();
我已经删除了amount – (digits only) the integer value of the transaction in lowest common denomination (ex. $5.20 is 520),所有值都将四舍五入到小数点后两位。

在PHP中,如果我尝试将金额转换为$,即int我将在示例中松开 .20 ,尽管需要它。什么是最好的方法呢?

2 个答案:

答案 0 :(得分:6)

您可以将金额乘以100,然后将其转换为...

gitlab-ci-multi-runner=1.11.1

所以5.20变成了520。

答案 1 :(得分:2)

如果您不确定小数位数,可以使用正则表达式从字符串中删除非数字值。

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