You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中格式化JSON对象中的十进制数保留两位小数?

解决PHP中JSON小数保留两位小数的问题

首先,你的代码存在两个关键问题:

  1. json_decode(file_get_contents($url, true))传入true会返回关联数组,但你后续用$a->CUP的对象语法访问,这会触发报错,需去掉true让它返回对象,或改用数组访问$a['CUP']。
  2. round()默认采用四舍五入规则,163.905765四舍五入到两位小数结果是163.91,和你预期的163.90不符——如果你需要截断多余小数位而非四舍五入,可以用以下方案:

方法1:截断后格式化输出

先通过数学运算截断到两位小数,再用number_format()强制保留两位小数(确保末尾的0不会被省略):

$url = "https://api.yadio.io/exrates/EUR";
$data = json_decode(file_get_contents($url));
foreach($data as $a){
    // 截断到两位小数:乘以100后取整,再除以100
    $truncated = floor($a->CUP * 100) / 100;
    // 格式化输出为两位小数
    echo number_format($truncated, 2, '.', '');
}

方法2:使用sprintf格式化

sprintf()可以直接格式化数字为指定小数位数,结合截断逻辑实现需求:

$url = "https://api.yadio.io/exrates/EUR";
$data = json_decode(file_get_contents($url));
foreach($data as $a){
    $truncated = floor($a->CUP * 100) / 100;
    echo sprintf("%.2f", $truncated);
}

补充说明

如果你实际需要四舍五入后保留两位小数(比如得到163.91并格式化为标准两位小数),可以直接用number_format($a->CUP, 2)或sprintf("%.2f", $a->CUP),它们会自动处理四舍五入并确保显示两位小数。

内容的提问来源于stack exchange,提问作者Kmilo Noa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:20:52