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

时间:2009-10-15 09:55:06

标签: java jsp

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

3 个答案:

答案 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”的决定可能是服务器端规则。