【问题标题】: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) 
    

    另外,重要的注意事项 - 在您的案例中试图克服精确性似乎是为了解决症状,而不是问题。所以你应该选择正确的数据模型而不是试图解决这个“问题”。

    【讨论】:

    • 回滚(带注释的版本) - 因为我的意见是 - 解决这个问题是 XY-problem 的一个案例。
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2010-12-07
    • 2012-04-17
    • 2022-01-19
    相关资源
    最近更新 更多