下面的代码给了我两个不同的输出:
$number = '1562798794365432135246';
echo $number;
echo number_format($number);
谁能解释一下吗?
编辑:忘了提及,上面给了我“1562798794365432135246 1,562,798,794,365,432,233,984”。请注意,最后六位数字完全不同,没有明显的原因(我要求它做的只是插入千位分隔符)。
number_format()
, 正如 PHP 手册中所述 http://php.net/manual/en/function.number-format.php,将浮点数转换为包含数千个逗号组的字符串。
$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 中可能的最大整数值是2147483647
在 32 位系统上和9223372036854775807
在 64 位系统上。如果您尝试在 32 位系统上将像上面这样的字符串转换为 int,您将分配$number
to 2147483647
而不是你想要的价值!
The number_format()
函数需要一个float作为一个论点,它也有类似的问题。当您将字符串作为参数传递给number_format()
,它在内部转换为浮点数。浮点数比整数稍微复杂一些。浮点数不像整数值那样具有硬上限,而是逐渐丢失精确在最低有效数字中,使最后几个位置不正确。
因此,不幸的是,如果您需要像这样格式化长字符串,您可能需要编写自己的函数。如果您只需要在数千个位置添加逗号,这应该很容易 - 只需使用strlen http://www.php.net/manual/en/function.strlen.php and substr http://php.net/manual/en/function.substr.php从字符串末尾获取每组三个字符,并创建一个中间有逗号的新字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)