微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 为什么我的数字值使用number_format()更改?

以下代码给出了两个不同的输出

$number = '1562798794365432135246';
echo $number; 
echo number_format($number);

有谁能解释一下?

编辑:忘了提,上面给了我“1562798794365432135246 1,562,798,794,365,432,233,984”.注意最后六位数字是完全不同的没有明显的原因(我要求它做的是插入千位分隔符).

解决方法:

number_format(),as stated by the PHP manual,将float转换为包含数千个逗号组的字符串.

$number = '1562798794365432135246';
var_dump($number); // string(22) "1562798794365432135246"
var_dump(number_format($number)); // string(29) "1,562,798,794,365,432,233,984" 

如果您正在尝试将字符串转换为整数,则可以这样执行:

$number = (int) $number;

但是,请注意,因为PHP中最大可能的整数值在32位系统上为2147483647,在64位系统上为9223372036854775807.如果您尝试在32位系统上将类似于上面的字符串转换为int,则将$number分配给2147483647而不是您想要的值!

number_format()函数将float作为参数,具有类似的问题.将字符串作为参数传递给number_format()时,它会在内部转换为float.浮点数比整数稍微复杂一点.而不是像整数值那样具有硬上限,浮动逐渐失去最低有效数字的精度,使得最后几个位置不正确.

所以,不幸的是,如果你需要像这样格式化长字符串,你可能需要编写自己的函数.如果你只需要在数千个地方添加逗号,这应该很简单 – 只需使用strlensubstr从字符串的末尾获取每个三个字符的集合,并在其间创建一个带逗号的新字符串.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐