我通过 api 发送带有 json 响应的数据,其中已提交金额。
要求金额应为
decimal
,点后有2个零,如400.00,并且它不应该是字符串。
我在 php 中使用 laravel 框架。
我尝试使用 php 中的
number_format
函数来做到这一点,
将 string
变为 float
(返回 400),
尝试使用 php-decimal 库,安装了 php-decimal/php-decimal 输出是“400.00”(字符串)
$amount = "400";
$decimalAmount = new Decimal($amount);
$formattedAmount = $decimalAmount->toFixed(2);
回复是这样的
receivingAmount: {
amount: "400.00"
}
但我需要它像这样
receivingAmount: {
amount: 400.00
}
在laravel中使用了Brick\Math\BigDecimal库,它还返回“400.00”(字符串)
$amount = '400';
$decimalAmount = BigDecimal::of($amount);
$formattedAmount = $decimalAmount->toScale(2);
这种情况还有其他解决办法吗?
JSON 规范中似乎没有任何内容禁止小数点后尾随零,但这是一种不寻常的情况,很少有 JSON 消费者可能支持它; PHP 内置 JSON 函数当然不会。
此外,您的代码不起作用,因为 PHP 没有可以处理尾随零的数字数据类型。您需要进行一些字符串操作。一种可能的方法是提出一些占位符语法:
<?php
$data = [
'receivingAmount' => [
'amount' => '{{amount:1}}',
],
];
$jsonTemplate = json_encode($data, flags: JSON_THROW_ON_ERROR);
$finalJson = strtr(
$jsonTemplate,
[
'"{{amount:1}}"' => '400.00',
]
);
echo $finalJson, PHP_EOL;
{"receivingAmount":{"amount":400.00}}
附注首先仔细检查您没有误读 API 规范。