如何在PHP中格式化JSON对象中的十进制数保留两位小数?
解决PHP中JSON小数保留两位小数的问题
首先,你的代码存在两个关键问题:
json_decode(file_get_contents($url, true))传入true会返回关联数组,但你后续用$a->CUP的对象语法访问,这会触发报错,需去掉true让它返回对象,或改用数组访问$a['CUP']。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
相关产品推荐
相关产品推荐

