首页 > 解决方案 > PHP 中的大量数字并不是它们看起来的那样

问题描述

我同意这个

php > var_dump(number_format(10000000000000000000000)); // 10^22
php shell code:1:
string(30) "10,000,000,000,000,000,000,000"

这里发生了什么事?

php > var_dump(number_format(100000000000000000000000)); // 10^23
php shell code:1:
string(30) "99,999,999,999,999,991,611,392"

有人可以向我解释这里到底发生了什么吗?

标签: php

解决方案


这在文档中有很好的描述:

整数溢出

如果 PHP 遇到超出整数类型范围的数字,它将被解释为浮点数。此外,导致数字超出整数类型范围的操作将改为返回浮点数。

Example #3 64 位系统上的整数溢出

<?php
$large_number = 9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number = 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million = 1000000;
$large_number =  50000000000000 * $million;
var_dump($large_number);                     // float(5.0E+19)
?>

浮点数无法准确表示许多值。请参阅浮点数学是否损坏?详情。

PHP_INT_MAX常量显示您的 PHP 版本支持的最大整数。


推荐阅读