应用程序仅在真实设备上崩溃 "java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 "
App crashes with "java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 " only on real device
我正在编写一个函数,例如将 1000 替换为 1K 等等。我不想在点之后显示 "00"
,所以我拆分了变量,如果第二部分等于“00”,它只显示第一部分。
这在模拟器上工作正常 运行 Android 10。在我的真实设备(P4XL,Android 10)上它崩溃并显示标题中的行。
我知道这个函数是导致崩溃的原因,因为当我注释掉它时,它在我的真实设备上也能正常工作,只是没有正确显示数字。
为什么要这样做?
public String number_uppercase(int input){
double input_double = (double) input;
if (input < 1000){
number_uppercase_cache = df.format(input_double);
number_uppercase_ending = "";
}
if (input >= 1000 && input < 1000000){
number_uppercase_cache = df.format(input_double/1000);
number_uppercase_ending = " K";
}
if (input >= 1000000 && input < 1000000000){
number_uppercase_cache = df.format(input_double/1000000);
number_uppercase_ending = " mio";
}
if (input >= 1000000000){
number_uppercase_cache = df.format(input_double/1000000000);
number_uppercase_ending = " mrd";
}
number_uppercase_split_part_1 = number_uppercase_cache.split("\.")[0];
number_uppercase_split_part_2 = number_uppercase_cache.split("\.")[1];
if(number_uppercase_split_part_2.equals("00")){
number_uppercase_output = number_uppercase_split_part_1 + number_uppercase_ending;
} else {
number_uppercase_output = number_uppercase_split_part_1 + "." + number_uppercase_split_part_2 + number_uppercase_ending;
}
return number_uppercase_output;
}
请尝试以下功能,这将满足您的目的
private String formatNumber(long _number) {
if (_number< 1000)
return "" + _number ;
else
int exp = (int) (Math.log(_number) / Math.log(1000));
return String.format("%.1f %c", _number/ Math.pow(1000, exp), "kMGTPE".charAt(exp-1));
}
我正在编写一个函数,例如将 1000 替换为 1K 等等。我不想在点之后显示 "00"
,所以我拆分了变量,如果第二部分等于“00”,它只显示第一部分。
这在模拟器上工作正常 运行 Android 10。在我的真实设备(P4XL,Android 10)上它崩溃并显示标题中的行。
我知道这个函数是导致崩溃的原因,因为当我注释掉它时,它在我的真实设备上也能正常工作,只是没有正确显示数字。
为什么要这样做?
public String number_uppercase(int input){
double input_double = (double) input;
if (input < 1000){
number_uppercase_cache = df.format(input_double);
number_uppercase_ending = "";
}
if (input >= 1000 && input < 1000000){
number_uppercase_cache = df.format(input_double/1000);
number_uppercase_ending = " K";
}
if (input >= 1000000 && input < 1000000000){
number_uppercase_cache = df.format(input_double/1000000);
number_uppercase_ending = " mio";
}
if (input >= 1000000000){
number_uppercase_cache = df.format(input_double/1000000000);
number_uppercase_ending = " mrd";
}
number_uppercase_split_part_1 = number_uppercase_cache.split("\.")[0];
number_uppercase_split_part_2 = number_uppercase_cache.split("\.")[1];
if(number_uppercase_split_part_2.equals("00")){
number_uppercase_output = number_uppercase_split_part_1 + number_uppercase_ending;
} else {
number_uppercase_output = number_uppercase_split_part_1 + "." + number_uppercase_split_part_2 + number_uppercase_ending;
}
return number_uppercase_output;
}
请尝试以下功能,这将满足您的目的
private String formatNumber(long _number) {
if (_number< 1000)
return "" + _number ;
else
int exp = (int) (Math.log(_number) / Math.log(1000));
return String.format("%.1f %c", _number/ Math.pow(1000, exp), "kMGTPE".charAt(exp-1));
}