PHP 8中json_encode如何输出保留两位小数(含.00)的浮点值
实现方案说明
JSON 规范本身没有「数字保留固定小数位」的定义,整数和浮点数同属数字类型,因此json_encode默认会将小数部分为0的浮点数转为整数格式输出,属于正常逻辑。如果需要强制输出两位小数后缀,可根据需求选择以下方案:
方案1:兼容JSON数字类型,保留至少1位小数(PHP 5.6.6+ 支持)
使用JSON_PRESERVE_ZERO_FRACTION参数强制保留浮点数的小数部分,适合接受1位小数后缀、需要JSON解析后为数字类型的场景:
echo json_encode(["testVal" => 54932.00], JSON_PRESERVE_ZERO_FRACTION); // 输出结果:{"testVal":54932.0}
方案2:严格输出两位小数后缀,解析后仍为数字类型
如果必须要.00格式的输出,可以先将数值格式化为两位小数的字符串,编码后通过正则移除对应字段的字符串引号即可:
// 格式化为两位小数的字符串,注意千位分隔符要设为空 $testVal = number_format(54932.00, 2, '.', ''); $json = json_encode(["testVal" => $testVal]); // 替换掉目标字段的引号,转为数字格式 $json = preg_replace('/"testVal":"(\d+\.\d{2})"/', '"testVal":$1', $json); echo $json; // 输出结果:{"testVal":54932.00}
方案3:兼容性最高,输出字符串类型的两位小数
如果允许字段为字符串类型,直接格式化后编码即可,无需额外处理,前端可自行转换为数字使用:
echo json_encode(["testVal" => number_format(54932.00, 2, '.', '')]); // 输出结果:{"testVal":"54932.00"}
内容的提问来源于stack exchange,提问作者Jadasdas
相关产品推荐
相关产品推荐

