1/4+1/5=9/20,像这种几分之几的加减乘除用php程序有什么好的实现方法么?

解决方案 »

  1.   

    比较偷懒的做法是连接数据库,,,SELECT 1/4+1/5 AS result
      

  2.   

    我搜索来的,你看看是否有帮助php 小数转换百分数函数2007-06-13 19:39function xx($n) 

        return $n*100.'%'; 

    --------------------------------------------------------如果有小说位数有要求 
    可以用 sprintf("%01.2f", $n*100).'%'; --------------------------------------------------------楼上的sprintf很不错。 --------------------------------------------------------乘以100加上%就可以了 --------------------------------------------------------sprintf --------------------------------------------------------先 四舍五入,后转换 
    $str=round(5.055, 2);     // 5.06 $str1=$str."%"; //5.06% --------------------------------------------------------sprintf("%01.2f", $n*100).'%'; --------------------------------------------------------sprintf("%01.2f", $n*100).'%' 
     
      

  3.   

    首次看到这样的提问,不过应该可以写个函数,方法可以这样写,先用explode从分数线(/)进行分隔,分成a1,a2  b1,b2,四个数字,再算公倍数,a2*b2=c2,然后算出总的结果:(a1*b2+ a2*b1)/c2,假设得到的结果:d2/c2,再算公约。先判断分子大还是分母大,如果分母大,if(d2%c2==0){//$gy=d2/c2  //$gy就是公约。当然一定要除去1,因为大家知道1是任何数的公约数。};根据这个方法,自己写个类或函数是可以解决的。
      

  4.   

    大致的过程为:
    $s = '1/4+1/5';preg_match_all("#((\d+)/(\d+))([-+/*]*)#", $s, $reg);for($i=0; $i<count($reg[1]); $i++) {
      $d[] = array($reg[2][$i], $reg[3][$i]);
      $f[] = $reg[4][$i];
    }foo($d[0], $d[1]);$a = eval("return {$d[0][0]} {$f[0][0]} {$d[1][0]};");
    $y = gcd($a, $d[0][1]);echo $a/$y . '/'. $d[0][1]/$y;/** 通分 **/
    function foo(&$a, &$b) {
      $f = $a[1] * $b[1];
      $a = array($a[0] * $f/$a[1], $f);
      $b = array($b[0] * $f/$b[1], $f);
    }/**
    辗转相除求最大公约数
    **/
    function gcd($a, $b) {
      if($a % $b)
        return gcd($b, $a % $b);
      else
        return $b;