这是一个 BigInteger 版本。
我需要下一个(而不是最接近的)10 的幂,但你可以看到这个想法:
import java.math.BigInteger;
class A {
public static void main(String[]args) {
System.out.println("hi");
for (long v : new long[] {0,1,2,9,10,11,99,100,101,12345678,123456789012345678L,1234567890123456789L}) {
System.out.println(""+v+" ==> "+nextPowerOf10(v));
}
}
static long nextPowerOf10(long v) {
return BigInteger.TEN.pow((int)Math.max(0,1+Math.floor(Math.log10(v)))).longValue();
}
}
如果你想让它在10的幂次方上表现不同,可以尝试调整上面的1+Math.floor
(0/1、floor/ceil/round)代码。顺便问一句,OP所说的“nearest”是指线性尺度还是对数尺度?是指最接近的大于还是最接近的小于?
>java A
hi
0 ==> 1
1 ==> 10
2 ==> 10
9 ==> 10
10 ==> 100
11 ==> 100
99 ==> 100
100 ==> 1000
101 ==> 1000
12345678 ==> 100000000
123456789012345678 ==> 1000000000000000000
1234567890123456789 ==> -8446744073709551616
log10()
,并优先使用double
。 - pmgpow(10.0, ceil(log10(value)))
- 没有必要编辑答案,但我想添加一条评论。 - FreelanceConsultant