zoukankan      html  css  js  c++  java
  • PHP下的浮点运算不准的解决办法

    首先看一段代码:

    首先看一段代码:
    
    <?php
    $a = 0.1;
    $b = 0.7;
    var_dump(($a + $b) == 0.8);
    
    打印出来的值居然为 boolean false

    PHP手册摘录如下:

    Warning 
    浮点数精度
    显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。 
    这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。


    解决办法也不难,php提供了两个函数bcadd()和bcsub().

    <?php
    $a = 0.1;
    $b = 0.7;
    var_dump(bcadd($a,$b,2) == 0.8);//输出为boolean true

     当然还有一种办法,就是将mysql的相应字段类型设置为更加精准的decimal类型。

  • 相关阅读:
    java_JDBC(3)
    java_JDBC(2)
    java_JDBC(1)
    seq语句随笔
    bzoj3159: 决战
    bzoj3905: Square
    bzoj3864: Hero meet devil
    有上下界的网络流问题
    uva12538
    bzoj3280: 小R的烦恼
  • 原文地址:https://www.cnblogs.com/phper12580/p/10551932.html
Copyright © 2011-2022 走看看