php有没有什么计算分数的好方法?

vbker 2010-06-29 05:18:06
1/4+1/5=9/20,像这种几分之几的加减乘除用php程序有什么好的实现方法么?
...全文
311 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2010-06-30
  • 打赏
  • 举报
回复
大致的过程为:
$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;
}
standford 2010-06-29
  • 打赏
  • 举报
回复
首次看到这样的提问,不过应该可以写个函数,方法可以这样写,先用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是任何数的公约数。};

根据这个方法,自己写个类或函数是可以解决的。
在-云端 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 amani11 的回复:]

比较偷懒的做法是

连接数据库,,,SELECT 1/4+1/5 AS result
[/Quote]

够懒,但是有效!
weaponX 2010-06-29
  • 打赏
  • 举报
回复
楼上做的是转百分数,我看还是的自己写一个,先找公倍数,再找公约数
www_7di_net 2010-06-29
  • 打赏
  • 举报
回复
我搜索来的,你看看是否有帮助

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).'%'


vbker 2010-06-29
  • 打赏
  • 举报
回复
晕,结果还是小数,我要的结果是分数形式的。
vbker 2010-06-29
  • 打赏
  • 举报
回复
自己写太麻烦了,还要计算公约数,公倍数来回倒腾!
vbker 2010-06-29
  • 打赏
  • 举报
回复
楼上好方法
amani11 2010-06-29
  • 打赏
  • 举报
回复
比较偷懒的做法是

连接数据库,,,SELECT 1/4+1/5 AS result
阿里酷巴巴 2010-06-29
  • 打赏
  • 举报
回复
你自己写一个不就行了,
好像没有这样的

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧