如何在JSP页面中将值转换为其他单位。例如,如果我得到值1001并且我想只显示1K,或者当我得到1 000 001时我想显示1M而不是那么长的属性,我怎么能这样做,当我得到我的jsp页面的Integer值时例如$ {myValue}?
答案 0 :(得分:4)
这个问题可以(并且应该在我看来)在没有循环的情况下解决。
以下是:
public static String withSuffix(long count) {
if (count < 1000) return "" + count;
int exp = (int) (Math.log(count) / Math.log(1000));
return String.format("%.1f %c",
count / Math.pow(1000, exp),
"kMGTPE".charAt(exp-1));
}
测试代码:
for (long num : new long[] { 0, 27, 999, 1000, 110592,
28991029248L, 9223372036854775807L })
System.out.printf("%20d: %8s%n", num, withSuffix(num));
<强>输出:强>
0: 0
27: 27
999: 999
1000: 1.0 k
110592: 110.6 k
28991029248: 29.0 G
9223372036854775807: 9.2 E
相关问题(和原始来源):
答案 1 :(得分:3)
static String toSymbol(int in) {
String[] p = { "", "K", "M", "G" };
int k = 1000;
assert pow(k, p.length) - 1 > Integer.MAX_VALUE;
int x = in;
for (int i = 0; i < p.length; i++) {
if (x < 0 ? -k < x : x < k) return x + p[i];
x = x / k;
}
throw new RuntimeException("should not get here");
}
答案 2 :(得分:1)
也许您可以编写java.text.Format的自定义实现或覆盖java.text.NumberFormat来执行此操作。我不知道有一个API类为你做这样的事情。
或者您可以将该逻辑保留在提供数据的类中,并使用适当的格式将其发送出去。这可能会更好,因为JSP应该只关心格式化问题。显示为“1000”或“1K”的决定可能是服务器端规则。