Java 从1004L到1000L(或1006L到1010L)的长圆形

Java 从1004L到1000L(或1006L到1010L)的长圆形,java,rounding,long-integer,modulo,integer-arithmetic,Java,Rounding,Long Integer,Modulo,Integer Arithmetic,假设我有Long someLong=1004L。我可以使用什么有效的方法将其四舍五入到1000L?注意,我实际上不知道someLong==1004L,所以我不能简单地做someLong-=4L。我需要一个可推广的方法。我还希望能够向下舍入到每个5,而不是每个10,例如,一个函数可以向上舍入到1005L(因为如果我们按5舍入,那么它将向上舍入,而不是向下舍入) 更多的例子。。可能是我有1926L,我想转到5,这意味着我需要1925L。或者我需要转到10,意思是我需要1930L这非常简单 如果您想四

假设我有
Long someLong=1004L
。我可以使用什么有效的方法将其四舍五入到
1000L
?注意,我实际上不知道
someLong==1004L
,所以我不能简单地做
someLong-=4L。我需要一个可推广的方法。我还希望能够向下舍入到每个
5
,而不是每个
10
,例如,一个函数可以向上舍入到
1005L
(因为如果我们按
5
舍入,那么它将向上舍入,而不是向下舍入)

更多的例子。。可能是我有
1926L
,我想转到
5
,这意味着我需要
1925L
。或者我需要转到
10
,意思是我需要
1930L

这非常简单

如果您想四舍五入,请始终向下取整:

您需要的公式是:

someLong-someLong%10
这是因为
someLong%10
someLong
的余数除以10。如果你从原始数字得到这个值,你会得到你想要的向下舍入的值

概括起来也很简单:如果需要,可以使用100,甚至13

如果要在另一个方向上舍入(例如,始终向上舍入或始终向中间舍入),则首先要在此数字上添加一些内容,然后始终向下舍入

someLong+9-(someLong+9)%10

如果您想始终取整:

然后你需要先加9,然后四舍五入

someLong+9-(someLong+9)%10

如果要始终四舍五入到中间:

…你还想去最近的neightbor。然后,首先添加所需间隔的一半,然后始终向下取整。例如,对于10,它是:

someLong+5-(someLong+5)%10
试试这个:

double a=1002l;
double b=a/10;

a=Math.round(b)*10;

System.out.println("Double round of value : "+a);

因此
m
可能是
10,5,…

四舍五入到
k
的最接近倍数的通用函数是(仅适用于正数):


如果要使用
BigDecimal>的语义将
四舍五入到
步骤
的最近倍数。向上四舍五入
(如果正好在两个步骤之间,则向上四舍五入),必要的计算如下:

val += step/2;
val -= val%step;

以下示例可满足您的需要:

public static void main(String[] args) {
    Long n   = 1004L;
    Long n2  = 1005L;

    n = round(n);
    n2 = round(n2);

    System.out.println(n);
    System.out.println(n2);
}

private static Long round(Long n) {
    if (n%10 <=4) {
        return n -=n%10;
    } else {
        return n += (10-n%10);
    }
}
publicstaticvoidmain(字符串[]args){
长n=1004L;
长n2=1005L;
n=圆形(n);
n2=圆形(n2);
系统输出println(n);
系统输出打印ln(n2);
}
专用静态长轮(长n){

如果(n%10)那么1007应该四舍五入到1005?这是这么多问题的重复。@KendallFrey找到一个问题,我们都将投票结束…四舍五入到
x
(接近0)的最近倍数,您可以简单地使用
(someLong/x)*x
%100
如果他只想四舍五入到最接近的千分之一,那是合适的。我想你需要在你这样做的时候投到双倍divisions@user2763361不,这不是必需的。它是故意的整数除法。你不需要。不变量是
乘以*k+1。这是一个非常简洁的解决方案。两行相交其他答案需要六到七个(包括我的,现在删除)。
val += step/2;
val -= val%step;
public static void main(String[] args) {
    Long n   = 1004L;
    Long n2  = 1005L;

    n = round(n);
    n2 = round(n2);

    System.out.println(n);
    System.out.println(n2);
}

private static Long round(Long n) {
    if (n%10 <=4) {
        return n -=n%10;
    } else {
        return n += (10-n%10);
    }
}