【问题标题】:Convert big integer or float to string exactly as they are完全按原样将大整数或浮点数转换为字符串
【发布时间】:2018-11-12 07:41:36
【问题描述】:

注意整数大于 PHP_INT_MAX (9223372036854775807)

代码:

  $x = 1502648031311810478;
  var_dump($x);

输出:

float 1.502648031381E+16

我想要这个:

1502648031311810478

作为一个字符串。

我尝试了所有的投射方式,但输出是 1.502648031381E+16

我想要字符串中的精确整数。

这不是Converting an integer to a string in PHP 的重复项,因为该问题的答案都没有涵盖号码在PHP_INT_MAX 之外的情况。

【问题讨论】:

  • 不复制:3v4l.org/oG43I
  • @MadhurBhaiya 用另一个 0 试试。似乎有评论 here 没有解决方案。
  • @AlivetoDie 它不是骗子。当号码在PHP_INT_MAX 之外时,重复标记链接中的答案均未涵盖该情况。
  • @AlivetoDie 同意 OP 的示例是错误的。但他提出这个问题的想法是正确的。请检查上面的讨论。
  • 这个数字到底是从哪里来的?没有这些信息,这个问题就无法正确回答。

标签: php yii2 floating-point numbers


【解决方案1】:

您似乎在使用json_decode。它将尽可能将数字转换为整数,否则为浮点数:

// 32bit integers
var_dump(json_decode("2147483647")); // int(2147483647)
var_dump(json_decode("2147483648")); // float(2147483648)

// 64bit integers
var_dump(json_decode("9223372036854775807")); // int(9223372036854775807)
var_dump(json_decode("9223372036854775808")); // float(9.2233720368548E+18)

您可以使用JSON_BIGINT_AS_STRING 标志,以便json_decode 将大整数解码为其原始字符串值

// 32bit integers
var_dump(json_decode("2147483647", false, 512, JSON_BIGINT_AS_STRING)); // int(2147483647)
var_dump(json_decode("2147483648", false, 512, JSON_BIGINT_AS_STRING)); // string(10) "2147483648"
// 64bit integers
var_dump(json_decode("9223372036854775807", false, 512, JSON_BIGINT_AS_STRING)); // int(9223372036854775807)
var_dump(json_decode("9223372036854775808", false, 512, JSON_BIGINT_AS_STRING)); // string(19) "9223372036854775808"

请注意,数字作为字符串对于算术来说并不是真正有用的,例如如果没有它(自动)转换为浮点数,你就不能从它添加或乘法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2011-11-25
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多