用PHP打印大数字

时间:2013-05-09 06:03:51

标签: php printf number-formatting

该数字为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

5 个答案:

答案 0 :(得分:0)

你可以这样轻松地做到: -

ini_set("precision",25); // change 25 to whatever number you want or need 
$num = 13911392101301011;
print $num;

答案 1 :(得分:0)

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

$val = "13911392101301011";

echo $val; // 13911392101301011
echo bcadd($val, '4'); // 13911392101301015
echo bcmul($val, '2'); // 27822784202602022

答案 2 :(得分:0)

当您实际将数字作为字符串时,请使用%s修饰符:

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

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

32位系统:

2^(32-1) = 2147483648

64位系统:

2^(64-1) = 9223372036854775808

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

答案 3 :(得分:0)

文档说明number_format is float中的$ number,因此存在明确的类型转换。等价的看起来像这样:

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

Float精确到14 digits左右,你的号码有17位数。

答案 4 :(得分:-1)

您的number_format电话正在设置。并且,空白

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

试试这个:

number_format(13911392101301011, 0, '.', ',');