簡體   English   中英

四舍五入到最接近的數字倍數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM