如何将纵横比降低到最低值?

时间:2018-03-28 17:15:18

标签: php math

给予宽高比X:Y,是否可以获得最低的条款?

例如,如果宽高比为6:4,我想获得3:2

如果宽高比为16:10,我想获得8:5

XY都是正整数

2 个答案:

答案 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;
?>

Demo of above example