したがって、次の関数を作成する必要がありますが、頭の中では複雑な数学なしでPHPの可能性を考えることはできません。
Googleで2時間検索しましたが、出てきたのはExcelフォーラムだけでした。 PHPのいくつかの単純な行で可能ですか?
あなたが探しているのでfourths(.00
、.25
、.50
、.75
)、数値に4を掛け、必要に応じて最も近い整数に丸め(ダウンの場合はfloor
、アップの場合はceil
)、4で除算します。
1.32、最も近い4番目まで:
1.32 * 4 = 5.28
floor(5.28)= 5.00
5.00/4 = 1.25
thirdsまたはeighths(など) .0
、.125
、.25
、.375
、.5
、.625
、.75
、.875
)。例えば:
1.77、8桁まで:
1.77 * 8 = 14.16
ceil(14.16)= 15.00
15.00/8 = 1.875
楽しみのために、次のような関数を書くことができます。
function floorToFraction($number, $denominator = 1)
{
$x = $number * $denominator;
$x = floor($x);
$x = $x / $denominator;
return $x;
}
echo floorToFraction(1.82); // 1
echo floorToFraction(1.82, 2); // 1.5
echo floorToFraction(1.82, 3); // 1.6666666666667
echo floorToFraction(1.82, 4); // 1.75
echo floorToFraction(1.82, 9); // 1.7777777777778
echo floorToFraction(1.82, 25); // 1.8
答えは本当に水密ではないことに注意してください。ここでは浮動小数点数を扱っているため、丸めた数を分母で除算すると、きれいに丸められた数が返されるとは限りません。 1.5ではなく1.499999999999を返す場合があります。それは浮動小数点数の性質です。
関数から数値を返す前に、別のラウンドが必要です。
私がしたように誰かがグーグルからここに着いた場合に備えて:)
ここの例#3を見てください。これはあなたの解決策の半分です- http://php.net/manual/en/function.round.php
Excelのmround()
関数によると:
function MRound($num,$parts) {
$res = $num * $parts;
$res = round($res);
return $res /$parts;
}
echo MRound(-1.38,4);//gives -1.5
echo MRound(-1.37,4);//gives -1.25
echo MRound(1.38,4);//gives 1.5
echo MRound(1.37,4);//gives 1.25