给予宽高比X:Y
,是否可以获得最低的条款?
例如,如果宽高比为6:4
,我想获得3:2
如果宽高比为16:10
,我想获得8:5
X
和Y
都是正整数
答案 0 :(得分:1)
您需要使用函数gmp_gcd
GMP gmp_gcd(GMP $ a,GMP $ b)
计算a和b的最大公约数。即使输入操作数中的任何一个或两个都是负数,结果也总是正的。
http://php.net/manual/en/function.gmp-gcd.php
您可以将比率的每一边除以给定的结果,以找出最低比率。
答案 1 :(得分:0)
您可以使用phospr/fraction进行简化,并将float number转换为fraction,它涵盖了所有可能的方面。
在您的情况下,您可以使用如下
<?php
function fraction($n,$d){
$a = abs($n);
$b = abs($d);
if ($a < $b) {
$c = $a;
$a = $b;
$b = $c;
}
$r = $a % $b;
while ($r > 0) {
$a = $b;
$b = $r;
$r = $a % $b;
}
$gcd = $b;
$n /= $gcd;
$d /= $gcd;
return "$n:$d";
}
$ar_str = '6:4';
$ar_arr = explode(":",$ar_str);
$simplified = fraction($ar_arr[0],$ar_arr[1]);
echo "Simplified of $ar_str is : ".$simplified;
?>