【问题标题】:php converting exponetial value having exponent > 12 to decimalphp将指数> 12的指数值转换为十进制
【发布时间】:2013-12-27 10:37:32
【问题描述】:
我正在从 excel 文件中读取一个值,当它是一个数字 >= 14 位时,它会将其转换为类似 3.5775004173581E+14 的值
(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 相同的字符串,第二个产生一些垃圾值,对于指数
【问题讨论】:
标签:
php
floating-point
type-conversion
exponential
【解决方案1】:
这是因为 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);
这不仅是关于 decimal 精度,而且是关于 float 精度
:
$strVal = "1234567890123456789";
var_dump((double)$strVal);//float(1.2345678901235E+18)
ini_set('precision', 19);
var_dump((double)$strVal);//float(1234567890123456768)
另外,重要的注意事项 - 在您的案例中试图克服精确性似乎是为了解决症状,而不是问题。所以你应该选择正确的数据模型而不是试图解决这个“问题”。