php转换具有指数的指数值> 12到十进制

时间:2013-12-27 10:37:33

标签: php floating-point type-conversion exponential

我正在读取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。

1 个答案:

答案 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) 

此外,重要提示 - 似乎在您的案例中试图克服精确度是尝试解决症状,而不是问题。因此,您应该选择正确的数据模型,而不是尝试解决这个“问题”。