[英]Round to nearest multiple of a number
是否有一種慣用的方法可以四舍五入到數字的最接近倍數,而不是向上和向下四舍五入並查看哪個最接近?
假設只有整數:
number multiple result
12 5 10
13 5 15
149 10 150
添加倍數的一半,然后向下取整。
result = ((number + multiple/2) / multiple) * multiple;
或者
result = number + multiple/2;
result -= result % multiple;
如果數字正好在中間,則四舍五入。 如果您想要在這種情況下不同的行為,您可能需要調整計算。 此外,如果number
可能接近類型范圍的頂部,請注意溢出。
易 Java 解決方法:
public Long roundToNearestLong(Long number, Long multiple) {
if (number == null)
return 0L;
Long smallerMultiple = (number / multiple) * multiple;
Long largerMultiple = smallerMultiple + multiple;
// Return of closest of two
return (number - smallerMultiple >= largerMultiple - number) ? largerMultiple : smallerMultiple;
}
Mike Seymour的答案假設“數字”為正
我之前在將數字四舍五入到下一個最接近的 5 的倍數上回答了這個問題
使用cmath::abs
int rounded = n + abs((n % denom) - denom);
你可以改變denom
你想要的任何面值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.