该数字为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
答案 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, '.', ',');