我正在使用支付网关,金额参数需要以这种方式格式化:
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 ,尽管需要它。什么是最好的方法呢?
答案 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