在java中,如何以有效的方式删除数字的数字?例如,我有13位数字,我想删除前3位数字:
一些代码:
long largeNumber = 1234567890123L;
long finalNumber = removeFirstDigits(largeNumber, 3); // finalNumber == 4567890123L
答案 0 :(得分:11)
当您处理基数B
中的数字表示时,删除前导数字的技巧是使用除以基数B
的幂的余数;要删除尾随数字,请使用整数除以基数。
具体来说,要删除k
- 位十进制数n
的{{1}}前导十进制数字,请将X
的除法余数除以10得到幂X
:
n-k
要删除尾随的int X = 12345678; // n = 8
// Remove 3 leading digits (k=3)
// 10 ^ (n-k) = 10 ^ 5 = 100000
int res = X % 100000; // res = 45678
十进制数字,请使用整数除以10 ^ 3:
k
答案 1 :(得分:2)
数学版
private long removeFirstDigits(long number, int left) {
return number % (long) Math.pow(10, (int) (Math.log10(number) + 1) - left);
}
字符串版本
private long removeFirstDigits(long number, int left) {
String string = String.valueOf(number);
return Long.parseLong(string.substring(left, string.length()));
}
我不知道哪个版本效率更高,速度更快。 Microbanchmark可以帮助确定这一点。
答案 2 :(得分:2)
这可能不是最干净的,但你总是可以使用String:
long largeNumber = 123456789101l;
String largeNumberInString = String.valueOf(largeNumber);
long resultingNumber = Long.parseLong(largeNumberInString.substring(3, largeNumberInString.length()));