44

したがって、次の関数を作成する必要がありますが、複雑な計算がなければ、私の頭はPHPの可能性を考えることができません。

  • 常に最も近い小数点に切り上げます(1.81 = 1.90、1.89 = 1.90、1.85 = 1.90)
  • 常に最も近い小数点に切り捨てます(1.81 = 1.80、1.89 = 1.80、1.85 = 1.80)
  • 常に最も近いx.25 /x.50 / x.75 / x.00(1.81 = 2、1.32 = 1.50)に切り上げます
  • 常に最も近いx.25 /x.50 / x.75 / x.00に切り捨てます(1.81 = 1.75、1.32 = 1.25)
  • 常に最も近いx.50/1に切り上げます(1.23 = 1.50、1.83 = 2)
  • 常に最も近いx.50 /1に切り捨てます(1.23 = 1、1.83 = 1.50)

私は今Googleで2時間検索しましたが、出てきたのはExcelフォーラムだけでした。PHPのいくつかの単純な行でそれは可能ですか?

4

4 に答える 4

122

4分の1 (、、、、 )を探しているので.00、数値に4を掛け、必要に応じて最も近い整数に丸めて(下の場合、上にある場合)、4で割ります。.25.50.75floorceil

1.32、最も近い4番目まで

1.32 * 4 = 5.28
フロア(5.28)= 5.00
5.00 / 4 = 1.25

同じ原則が、 3分の1や8の1 (、、、、、、、、、 )などの他の分数にも適用されます。例えば:.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
于 2013-02-15T21:19:25.190 に答える
4

答えは実際には水密ではないことに注意してください。ここでは浮動小数点数を扱っているため、丸められた数値を分母で割ったときに、きちんと丸められた数値が返されるとは限りません。1.5ではなく1.499999999999を返す場合があります。これは浮動小数点数の性質です。

関数から数値を返す前に、別のラウンドが必要です。

誰かが私がしたようにグーグルからここに着陸した場合に備えて:)

于 2015-03-11T10:45:03.930 に答える
4

mround()Excelの関数によると:

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
于 2016-09-04T07:38:36.190 に答える
2

ここにある例3を見てください。これは、ソリューションの半分です-http://php.net/manual/en/function.round.php

于 2013-02-15T21:15:27.513 に答える