5

数字是13911392101301011,无论使用sprintf还是number_format我都会得到同样奇怪的结果。

sprintf('%017.0f', "13911392101301011"); // Result is 13911392101301012
number_format(13911392101301011, 0, '', ''); // Result is 13911392101301012

sprintf('%017.0f', "13911392101301013"); // Result is 13911392101301012
number_format(13911392101301013, 0, '', ''); // Result is 13911392101301012
4

5 回答 5

1

由于您实际上将数字作为字符串,请使用%s修饰符:

sprintf('%s', "13911392101301011"); // 13911392101301011

请注意,PHP 在内部使用有符号整数。大小取决于您的系统。

32位系统:

2^(32-1) = 2147483648

64位系统:

2^(64-1) = 9223372036854775808

-1因为 1 位是为标牌标志保留的。

于 2013-05-10T01:16:32.333 回答
0

您可以通过这种方式轻松完成:-

ini_set("precision",25); // change 25 to whatever number you want or need 
$num = 13911392101301011;
print $num;
于 2013-05-09T06:38:36.223 回答
0

由于您在这里处理大量数字,您可能希望将它们保留为字符串并使用BCMath 函数对字符串值执行数值运算。

$val = "13911392101301011";

echo $val; // 13911392101301011
echo bcadd($val, '4'); // 13911392101301015
echo bcmul($val, '2'); // 27822784202602022
于 2013-05-09T06:41:10.767 回答
0

文档指出 number_format 中的 $number是浮点数,因此存在显式类型转换。等效项如下所示:

sprintf('%017.0f', (float) "13911392101301011");

浮点数精确到14 位左右,您的号码有 17 位。

于 2014-05-30T17:03:57.187 回答
-1

您的 number_format 电话正在设置 . 和 , 留空

string number_format ( float $number , int $decimals = 0 , string $dec_point = '.' , string $thousands_sep = ',' )

尝试这个:

number_format(13911392101301011, 0, '.', ',');
于 2013-05-09T06:07:07.710 回答