如何将数字舍入到最接近的十位?

27

如何将数字四舍五入到最近的十位数,而不使用if语句?例如,将98舍入到100。

int num = 87;
double t;
double d = 1.0 * num; // d = 87.0
t = d/100;
System.out.println(t);

重复/相似:https://dev59.com/cWox5IYBdhLWcg3wSCfk - Mr-IDE
2个回答

42
你可以使用Math.round(num/10.0)* 10

如果你除以10d或10.0,num可以是任何(原始)数字。 - Peter Walser
真的,已编辑。@Peter - Zarwan

23
answer = ((num+5)/10)*10; // if num is int

在Java中将数字保留到小数点后n位,可以使用以下表达式:(long)((num * Math.pow(10, n)) + 0.5) / Math.pow(10, n),其中numdouble类型。如果numint类型,请参考此问题了解更多信息。
编辑:
如果numdouble类型,请按照@PeterLawrey的建议将类型转换添加到表达式(long)((num+5)/10)中。


1
你确定吗?如果 num 是 14.0,那么这将计算为 20。 - Bathsheba
我可能有些老年痴呆了,但上次我检查时,(14.0 + 5)/ 10为1.9,四舍五入后变成2.0。请记住,Math.round实现的是德式舍入。 - Bathsheba
将int转换为int是多余的,如果已经是long类型,则更糟。 - Peter Lawrey
@sinsuren 如果是double类型,就需要进行转换,但如果可能的话最好使用long类型。对于OP的问题,它是int类型。 - Peter Lawrey
@PeterLawrey,我已经按照您的建议进行了更改。感谢您提高答案质量。 - sinsuren
谢谢 @sinsuren,它有效了。同时也感谢所有帮助过我的人。 - Cmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接