<?php
echo "<br/>---------------------------------------------------<br/>";
$wfundamt = 100000;
$ratio = -0.009999;while($ratio <= 0.009999){
     
     $profit = 0;
     
     $var = $wfundamt * $ratio;
     
     if(strpos($var,'.')){
          $profit = floor($wfundamt * $ratio);
     }else{
          $profit = $var;
     }
     
     echo $wfundamt ." * " . $ratio . "=" .$var ." --- ". $profit ."<br/>";
     
     $ratio = $ratio + 0.000001 ;
     
}
echo "<br/>---------------------------------------------------<br/>";?>
上面是源程序,执行结果为下,一部分:---------------------------------------------------
100000 * -0.009999=-999.9 --- -1000
100000 * -0.009998=-999.8 --- -1000
100000 * -0.009997=-999.7 --- -1000
100000 * -0.009996=-999.6 --- -1000
100000 * -0.009995=-999.5 --- -1000
100000 * -0.009994=-999.4 --- -1000
100000 * -0.009993=-999.3 --- -1000
100000 * -0.009992=-999.2 --- -1000
100000 * -0.009991=-999.1 --- -1000
100000 * -0.00999=-999 --- -999
100000 * -0.009989=-998.9 --- -999
100000 * -0.009988=-998.8 --- -999
100000 * -0.009987=-998.7 --- -999
100000 * -0.009986=-998.6 --- -999
100000 * -0.009985=-998.5 --- -999
……
100000 * -0.00994=-994 --- -994
100000 * -0.009939=-993.9 --- -994
100000 * -0.009938=-993.8 --- -994
100000 * -0.009937=-993.7 --- -994
100000 * -0.009936=-993.6 --- -994
100000 * -0.009935=-993.5 --- -994
100000 * -0.009934=-993.4 --- -994
100000 * -0.009933=-993.3 --- -994
100000 * -0.009932=-993.2 --- -994
100000 * -0.009931=-993.1 --- -994
100000 * -0.00993=-993.00000000001 --- -994
100000 * -0.0099290000000001=-992.90000000001 --- -993
100000 * -0.0099280000000001=-992.80000000001 --- -993
100000 * -0.0099270000000001=-992.70000000001 --- -993
100000 * -0.0099260000000001=-992.60000000001 --- -993
100000 * -0.0099250000000001=-992.50000000001 --- -993
100000 * -0.0099240000000001=-992.40000000001 --- -993
100000 * -0.0099230000000001=-992.30000000001 --- -993
100000 * -0.0099220000000001=-992.20000000001 --- -993
……
100000 * 0.0099979999999982=999.79999999982 --- 999
100000 * 0.0099989999999982=999.89999999982 --- 999---------------------------------------------------注意这一段:
100000 * -0.009932=-993.2 --- -994
100000 * -0.009931=-993.1 --- -994
100000 * -0.00993=-993.00000000001 --- -994
100000 * -0.0099290000000001=-992.90000000001 --- -993
到这儿为什么不正常递增了?
显示的是-0.00993 结果却为-993.00000000001
遇到过这种情况没有?
请高人解说说明分析探讨……

解决方案 »

  1.   

    浮点数是在有限的空间存储无限的数,必然要丢失精度
    这是基本的数学常识php 已经提供了高精度数学运算的扩展库,你却不去用
    非要纠结这个不可能完成的事情
      

  2.   

    bcmath是吧!
    关键是服务器不支持高精度数学函数库,要用意味着重新编译安装PHP,暂停服务是代价!
    有没有好的解决办法?
      

  3.   

    ... 谁告诉你得重新编译安装PHP了... 作为动态库加载就行了, 重启一下apache就好了.
      

  4.   


    linux 直接 编译就行了 php源码包都自带的,整个过程不超过2分钟
    win的话 直接修改php.ini 重启 不超过2分钟