六年后(四舍五入),这是我的贡献——我很久以前就学会的一个小技巧,很惊讶没有其他人在这里提到过。
这个想法是通过在进行除法之前将除数的一半添加到分子来进行舍入。
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);
}
另一种可能性是将这个技巧与 dongilmore 和 supercat 提到的想法结合起来,而不是用指定或隐含的两个除,你可以将分子和分母都乘以 2。
int height2 = (width2 * height1 * 2 + width1) / (width1 * 2);
在除数是或可能是奇数的情况下,这会给出更好的答案。