在JSP页面中将值转换为单位前缀

如何在JSP页面中将值转换为其他单位。 例如,如果我得到值1001并且我想只显示1K,或者当我得到1 000 001时我想显示1M而不是那么长的属性,我怎么能这样做,当我得到我的jsp页面的Integer值时例如$ {myValue}?

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"); } 

这个问题可以(并且应该在我看来)在没有循环的情况下解决。

就是这样:

 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 

相关问题(和原始来源):

  • 如何在java中将字节大小转换为人类可读的格式?

也许您可以编写java.text.Format的自定义实现或覆盖java.text.NumberFormat来执行此操作。 我不知道有一个API类为你做这样的事情。

或者您可以将该逻辑保留在提供数据的类中,并使用适当的格式将其发送出去。 这可能会更好,因为JSP应该只关心格式化问题。 显示为“1000”或“1K”的决定可以是服务器端规则。