我正在读取excel文件中的值,当它是一个数字> = 14位数时,它将其转换为类似3.5775004173581E + 14的数字我希望得到十进制的确切值,如3.57750041735819我试过
(float) 3.5775004173581e+14 O/P 3.5775004173581e+14
intval((float) 3.5775004173581e+14) O/P 740815490
number_format(3.5775004173581e+14) O/P 3.57750041735810
但是前者返回与O / P相同的字符串,第二个产生一些垃圾值,其中指数< 14适用,而number_format在14位后添加traling 0。
答案 0 :(得分:3)
那是因为float precision
设置是默认14
。要更改此设置,请使用ini_set()
,例如。然后您就可以获得正确的值。样品:
$strVal = "1234567890.123456789";
//float(1234567890.1235), because
//default precision is 14:
var_dump((double)$strVal);
//float(1234567890.123456717)
ini_set('precision', 19);
var_dump((double)$strVal);
这不仅仅是关于十进制精度,而是关于 float 精度 :
$strVal = "1234567890123456789";
var_dump((double)$strVal);//float(1.2345678901235E+18)
ini_set('precision', 19);
var_dump((double)$strVal);//float(1234567890123456768)
此外,重要提示 - 似乎在您的案例中试图克服精确度是尝试解决症状,而不是问题。因此,您应该选择正确的数据模型,而不是尝试解决这个“问题”。