PHP 中科学记数法的不正确数字

incorrect number from scientific notation in PHP

我正在从包含长数字 ID 字符串的电子表格中读取数据。我试图通过确保即使列格式被错误地设置为数字也能正确读取数据来使我的系统万无一失。

所以电子表格包含的数字 32486509223273700000 以科学计数法表示为 3.2486509223274E+19。在将其存储为字符串之前,我需要将其转换为原始值。 这就是问题所在。

我无法PHP将科学计数法转回原来的数字用各种方法把数字转回原来的数字,似乎总是有不同的数字而不是尾随零。

$i = 3.2486509223274E+19;
echo $i; //32486509223274000384
echo number_format($i,0,'',''); //32486509223274000384
echo sprintf('%0.0f', $i); //32486509223274000384

请注意,我打算将最终结果存储为字符串。

请注意,double 浮点格式的精度约为 15.5 位小数。所有其他显示的小数都是外推的。和往常一样,外推是一种危险的游戏。

或者说3.2486509223274E+19代表一个区间,大致是从3.24865092232739984E+193.24865092232740024E+19。该区间内的任何整数都必须算作 "correct" 外推。

最简单的解决方案是将大数转换为浮点值:

$i = 3.2486509223274E+19;
echo printf ("%.0f", $i);
// output 3248650922327400038420

这似乎是一个稍微不正确的值,但正如@LutzL 已经指出的那样,这是不可避免的。

php.ini 中有一个名为 precision 的值,表示浮点数显示的位数。 在您的情况下,将其至少设置为 21。 最好设置为 30

precision=30