6 年 (四捨五入) 後、ここに私の貢献があります - 私がずっと前に学んだちょっとしたトリックですが、他の誰もここで言及していないことに驚いています。
アイデアは、除算を行う前に分子に除数の半分を追加して丸めを行うことです。
int height2 = (width2 * height1 + width1 / 2) / width1;
実際には、OPのように除数が変数である場合には、必ずしもそれを行うことをお勧めしません。代わりに、Math.Round() を使用する方がはるかに理解しやすいため、より良い場合があります。
しかし、除数が定数の場合は、このトリックを使用します。だから代わりに
int height2 = width2 * height1 / 4; // No rounding
私は使うだろう
int height2 = (width2 * height1 + 2) / 4;
より典型的な例を次に示します
private static Size ResizeWithPercentage(Size oldSize, int resizePercentage)
{
return new Size((oldSize.Width * resizePercentage + 50) / 100,
(oldSize.Height * resizePercentage + 50) / 100);
}
もう 1 つの可能性は、このトリックを dongilmore と supercat によって言及されたアイデアと組み合わせることです。つまり、2 による除算を指定または暗示するのではなく、分子と分母の両方に 2 を掛けることができます。
int height2 = (width2 * height1 * 2 + width1) / (width1 * 2);
これにより、除数が奇数であるか、奇数である可能性がある場合に、より適切な答えが得られます。