在php中将数字格式化为十进制

问题描述 投票:0回答:1

我通过 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);

这种情况还有其他解决办法吗?

php decimal laravel-8 bigdecimal php-8.1
1个回答
0
投票

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 规范。

© www.soinside.com 2019 - 2024. All rights reserved.