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);
}
}