gpt4 book ai didi

PHP json有时会将 float 转换为整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:39 25 4
gpt4 key购买 nike

给定一个 float ,经过 json 编码和后续解码后,变量类型 float(或 double)有时不会保留。

$n1 = 1.23;
$json = json_encode($n1); // '1.23'
$n2 = json_decode($json);

$t1 = gettype($n1); // 'double'
$t2 = gettype($n2); // 'double'

$d = $n1 === $n2; // true

但是,当小数为“0”时,结果不同:

$n1 = 1.0;
$json = json_encode($n1); // '1'
$n2 = json_decode($json);

$t1 = gettype($n1); // 'double'
$t2 = gettype($n2); // 'integer'

$d = $n1 === $n2; // false

我不得不得出结论,json 编码/解码函数的行为是基于数据值的,因此很难预测,最终非常不一致。

有没有办法保证在json编码/解码过程中保留变量的类型?

最佳答案

JSON 格式本身没有 float 和整数的概念,它只有数字。这是它是一种独立于语言的数据格式的原因之一。

但是,我发现 json_encode 选项 JSON_PRESERVE_ZERO_FRACTION做的伎俩。

JSON_PRESERVE_ZERO_FRACTION

Ensures that float values are always encoded as a float value.Available since PHP 5.6.6.

它强制 json_encode 始终在 JSON 表示法中至少放置一个“0”十进制数字。

json_decode 本身能够将十进制数字解释为 float ,并且不需要任何特殊标志。

$n1 = 1.0;
$json = json_encode($n1, JSON_PRESERVE_ZERO_FRACTION); // '1.0'
$n2 = json_decode($json);

$t1 = gettype($n1); // 'double'
$t2 = gettype($n2); // 'double'

$d = $n1 === $n2; // true

关于PHP json有时会将 float 转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45543930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com