How to round *down* integers in Java?

て烟熏妆下的殇ゞ 提交于 2019-12-18 14:05:33

问题


I'd like to round integers down to their nearest 1000 in Java.

So for example:

  • 13,623 rounds to 13,000
  • 18,999 rounds to 18,000
  • etc

回答1:


Simply divide by 1000 to lose the digits that are not interesting to you, and multiply by 1000:

i = i/1000 * 1000

Or, you can also try:

i = i - (i % 1000)



回答2:


You could divide the number by 1000, apply Math.floor, multiply by 1000 and cast back to integer.




回答3:


int i = Math.floorDiv(-13623, 1000) * 1000 
//i => -14000

The above code will always round down (towards negative infinity) assuming the divisor (1000 in the example) is positive.

The other answer (i = i/1000 * 1000) rounds down when i is positive, but up when i is negative.

-13623 / 1000 * 1000 == -13000

There is also a version of Math.floorDiv for longs which will work for very large numbers where the Math.floor method might fail due to the precision of double.

There are also Math.floorMod methods to go with the floorDivs which might allow you to shorten it a bit:

int i = -13623;
i -= Math.floorMod(i, 1000);
//i => -14000


来源:https://stackoverflow.com/questions/1783519/how-to-round-down-integers-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!