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 .该区间内的任何整数都必须算作"正确"外推。

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

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

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

PHP 中有一个值.ini称为精度,它将为浮点数显示多少位。在您的情况下,将其设置为至少 21。最好将其设置为 30

精度=30