Skip to content

Instantly share code, notes, and snippets.

@froop
Created January 11, 2012 08:40
Show Gist options
  • Select an option

  • Save froop/1593750 to your computer and use it in GitHub Desktop.

Select an option

Save froop/1593750 to your computer and use it in GitHub Desktop.
[Java] 数値を指定の精度で切り上げ
public static long ceil(long num, int precision) {
if (num == 0) {
return num;
}
int digits = calcTruncateDigits(num, precision);
return ceilTruncate(num, digits);
}
private static int calcTruncateDigits(long num, int precision) {
int log = (int) Math.log10(Math.abs(num));
return log - precision + 1;
}
private static long ceilTruncate(long num, int digits) {
if (digits <= 0) {
return num;
}
long unit = (long) Math.pow(10, digits);
long count = (long) Math.ceil((double) num / unit);
return unit * count;
}
@Test
public void testCeilZero() {
assertEquals(0, ceil(0, 1));
assertEquals(0, ceil(0, 2));
}
@Test
public void testCeil1() {
assertEquals(1, ceil(1, 1));
assertEquals(20, ceil(12, 1));
assertEquals(200, ceil(123, 1));
}
@Test
public void testCeil2() {
assertEquals(1, ceil(1, 2));
assertEquals(12, ceil(12, 2));
assertEquals(130, ceil(123, 2));
assertEquals(1300, ceil(1234, 2));
}
@Test
public void testCeil3() {
assertEquals(12, ceil(12, 3));
assertEquals(123, ceil(123, 3));
assertEquals(1240, ceil(1234, 3));
assertEquals(12400, ceil(12345, 3));
}
@Test
public void testCeilMinus() {
assertEquals(-1, ceil(-1, 1));
assertEquals(-10, ceil(-12, 1));
assertEquals(-12, ceil(-12, 2));
assertEquals(-120, ceil(-123, 2));
assertEquals(-1230, ceil(-1234, 3));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment