我正在从包含长数字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
请注意,我打算将最终结果存储为字符串。
答案 0 :(得分:2)
请注意,double
浮点格式的精度约为15.5位小数。所有其他显示的小数都是外推的。和往常一样,外推是一种危险的游戏。
或换句话说,3.2486509223274E+19
代表一个间隔,大致从3.24865092232739984E+19
到3.24865092232740024E+19
。该区间中的任何整数都必须计为"正确"外推。
答案 1 :(得分:2)
最简单的解决方案是将大数字转换为浮点值:
$i = 3.2486509223274E+19;
echo printf ("%.0f", $i);
// output 3248650922327400038420
这似乎是一个稍微不正确的值,但是@LutzL已经指出它是无法避免的。
答案 2 :(得分:0)
php.ini中有一个名为 precision 的值,它为浮点数显示的位数。 在你的情况下,将它设置为至少21。 最好将其设置为30
精度= 30