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类型。

  • 相关阅读:
    Linux使用手册
    Oracle&SQL使用记录
    docker的使用
    springboot与mybatis
    JavaScript与TypeScript总结
    React总结
    React与jsplumb
    DB2入门
    吾尝终日而思矣——2019.02.17
    吾尝终日而思矣——2019.02.12
  • 原文地址:https://www.cnblogs.com/phper12580/p/10551932.html
Copyright © 2011-2022 走看看