我正在使用LargeValueFormatter格式化Y轴值。它适用于除英语(澳大利亚)以外的所有语言环境。 例如,对于所有其他语言环境,它会返回4K,8K,16K等值,但是当我将语言环境更改为英语(澳大利亚)时,它会返回与4e03、8e03、16e3 ...相同的值。
我该如何解决?我的疑问在于DecimalFormat实例,因为它在内部使用语言环境。
设备:[仿真器,三星S7,Moto Z] Android版本[8,9] 图书馆版本(v 3.0.3)
答案 0 :(得分:1)
是因为区域设置问题。 “ E”变为小写,则正则表达式不再起作用。
在等待来自MPAndroidChart的正式补丁时,您可以通过创建自己的LargeValueFormatter(与原始源代码类似,但在构造函数中进行小的修改)来临时修复:
public LargeValueFormatter() {
NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
mFormat = (DecimalFormat)nf;
mFormat.applyPattern("###E00");
}
或更改makePretty():
private String makePretty(double number) {
String r = mFormat.format(number);
int numericValue1 = Character.getNumericValue(r.charAt(r.length() - 1));
int numericValue2 = Character.getNumericValue(r.charAt(r.length() - 2));
int combined = Integer.valueOf(numericValue2 + "" + numericValue1);
r = r.replaceAll("E|e[0-9][0-9]", SUFFIX[combined / 3]);
while (r.length() > MAX_LENGTH || r.matches("[0-9]+\\.[a-z]")) {
r = r.substring(0, r.length() - 2) + r.substring(r.length() - 1);
}
return r;
}
答案 1 :(得分:0)
@anhtuannd的答案对我有用。如果您使用的是Kotlin,请将主要构造函数更改为:
init {
mFormat = (NumberFormat.getNumberInstance(Locale.US) as DecimalFormat).also {
it.applyPattern("###E00")
}
}