java - 如何使用大值格式化程序设置自定义后缀
问题描述
我想使用大值格式化程序设置自定义后缀。它的默认后缀是:
- k 为千
- m 代表百万
- b 十亿
- t 为万亿
但我想将其定制为:
- rb 为千
- jt 为百万
- m 为十亿
- t 为万亿
我已经尝试将它的默认值更改为 rb、jt、m 和 t,但结果只是:
- r 代表千,而不是 rb
- j 代表百万,而不是 jt
它没有 m 和 t 的问题,因为它只包含 1 个后缀
private String[] mSuffix = new String[]{"", "k", "m", "b", "t"};
结果是:812k、8.12m、8.12b、8.12t
试图将其更改为:
private String[] mSuffix = new String[]{"", "rb", "jt", "m", "t"};
结果是:812r、8.12j、8.12m、8.12t
这是使用 mSuffix 的时候
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[0-9][0-9]", mSuffix[combined / 3]);
while (r.length() > mMaxLength || r.matches("[0-9]+\\.[a-z]")) {
r = r.substring(0, r.length() - 2) + r.substring(r.length() - 1);
}
return r;
}
我希望输出是
- 812RB,
- 8.12 焦耳,
- 8.12m,
- 8.12吨
提前致谢
解决方案
假设mFormat.formatter(number);
做正确的事(5000.0 -> “5k”),那么:
private String makePretty(double number) {
String r = mFormat.format(number);
if (r.indexOf("k") > 0) {
r = r.replace("k", "rb");
} else if (r.indexOf("m") > 0) {
r = r.replace("m", "jt");
} else if (r.indexOf("b") > 0) {
r = r.replace("b", "m")
}
return r;
}
推荐阅读
- javascript - Google API 使用 JavaScript 中的 id_token 从 Java 访问 Gmail
- mysql - MySQL 将一个查询组合成另一个以用于 Grafana
- c++ - 绝对编码器十六进制输入
- java - 在 Java 中创建这种模式?(我的循环不工作)
- jquery - 仅在部分视图上验证 1 个字段的 JQuery 验证器
- java - 自动测量 Hadoop 执行时间
- php - 更改 DOCUMENT_ROOT 以引用外部 URL 图像文件路径
- java - Spring-WS 请求失败但soapUI 工作
- android - 在视图寻呼机中启动片段导致非法状态异常?
- c++ - C++ 等价于整数的#define