【问题标题】:Convert a big integer to a full string in PHP在 PHP 中将一个大整数转换为一个完整的字符串
【发布时间】:2012-03-08 17:09:53
【问题描述】:

我已经搜索了一段时间,但我能找到的并不是我要搜索的。我需要将一个可能非常大的整数值转换为字符串。听起来很简单:"$var"?不,因为这会导致数字的 E+ 表示形式。

<?php

$var = 10000000000000000000000000;
echo $var."\n";
echo "'$var'\n";
echo (string) $var."\n";
echo strval($var);

?>

1.0E+25
'1.0E+25'
1.0E+25
1.0E+25

我怎样才能将输出改为10000000000000000000000000

【问题讨论】:

  • 请注意,您的“非常大的整数”在您的计算机中没有表示为整数,因为它超出了 32 位和 64 位的界限。
  • $var = '10000000000000000000000000';
  • 您不能使用本机 int 值执行此操作。它将必须存储为字符串。如果您要对这个数字进行数学运算,则必须使用 bcmath 库。
  • 请注意,如果您从 JSON 解码大整数,您可以使用 JSON_BIGINT_AS_STRING 作为 json_decode 的第四个参数

标签: php casting integer type-conversion


【解决方案1】:

PHP 存储的不是整数,而是浮点数,这就是为什么你最终会得到 1.0E+25 而不是 10000000000000000000000000。

遗憾的是,无法在 PHP 中将其用作整数值,因为 PHP 无法保存该大小的整数。如果这来自数据库,那么它将是一个字符串,您可以随心所欲地使用它。如果将其存储在其他位置,则将其存储为字符串。

您的替代方法是将其存储为浮点数并始终将其考虑在内,但这需要额外的转换和在某些地方进行处理。

也有人建议使用GNU Multiple Precision,但在 PHP 中默认不启用。

$int=gmp_init("10000000000000000000000000");
$string=gmp_strval($int);
echo $string;

【讨论】:

  • 我正要建议 GMP。不要使用浮点数 - 这么大的数字的精度是不可靠的。
【解决方案2】:

更新: 找到下一个帖子:

// strval() will lose digits around pow(2,45);
echo pow(2,50); // 1.1258999068426E+015
echo (string)pow(2,50); // 1.1258999068426E+015
echo strval(pow(2,50)); // 1.1258999068426E+015

// full conversion
printf('%0.0f',pow(2,50)); // 112589906846624
echo sprintf('%0.0f',pow(2,50)); // 112589906846624

使用printfsprintf

【讨论】:

  • 我在添加答案的第二部分之前提交错误
  • 浮点数在这种尺寸下并不可靠。 echo sprintf("%0.0f", 10000000000000000000000000); 在我的系统上输出 10000000000000000905969664
【解决方案3】:

我在获取 facebook id 并在 MySQL 中找到它时遇到了这个问题。 半小时后,我完美地找到了这项工作! 将此行插入到您的 php 脚本中:

ini_set('precision',30);

发件人:https://forums.phpfreaks.com/topic/125907-solved-convert-big-number-to-string/#entry651084

【讨论】:

  • 花了一整天后,我发现了这个提示。它救了我的命。谢谢二人组。
【解决方案4】:

你想表达的整数:

$var = 10000000000000000000000000;

在您的系统上不可用。它太大了,因此 PHP 将其转换为浮点数,这将改变数字(32 位系统示例):

       10000000000000000905969664

常见的限制是:

 yours :  10 000 000 000 000 000 000 000 000
 32 bit:                       2 147 483 648
 64 bit:           9 223 372 036 854 775 808

值的变化称为浮点精度,PHP manual about integers 会告诉你整数限制和the floats page about floating point precision(见大红色警告)。根据您使用的系统,您可以使用应用程序需要的范围编译 PHP,或者您必须使用其他数据类型,例如 the gmp library,它能够选择字符串作为整数并处理它们。

以下示例仅显示输出,但您可以进行乘法运算等:

$r = gmp_init('10000000000000000000000000');
echo gmp_strval($r);

希望这有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多