繁体   English   中英

字符串格式为 java 中最大字符数的双倍

[英]String format a double to a maximum number of character in java

如标题所述,我想在 java 中写入一个具有最大字符数的字符串。

好吧,实际上是一个确切数量的字符,但我可以用给定的 X 将它包装在String.format("%Xs", ...)中以填充缺失的字符。

请注意,在 SO 和互联网上有很多与此相关的问题,但我找不到与 java 完全相同的问题。

我想到的是写

  • 如果适合,则为完整的双倍:对于最大字符 n=10,123.4567 很好
  • 四舍五入并保留 integer 部分(如果适合):对于 n=10,123456.789654 将格式化为 123456.79
  • 否则使用指数:对于 n=10,123456789123.321654 将格式化为 1.23457e11

=> 有没有实用的工具可以做到这一点或类似的东西?

这就是我现在所拥有的,并不完美,但我已经花了足够的时间。

这个想法是Double.toString正在做我想要的,但长度固定(也许有人知道如何配置该长度?)。 所以我使用它并在必要时删除小数

/** write a double to a string of exact given length (but for some extreme cases) */
public static String doubleToString(double x, int length) {
    String str = Double.toString(x);
    if(str.length() <= length){
        return org.apache.commons.lang.StringUtils.repeat(" ", length - str.length()) + str;

    } else if(str.contains("E")){
        String[] split = str.split("E");
        String num = split[0];
        String exp = split[1];
        return removeDecimal(num, length - exp.length()-1) + 'E' + exp;
    } else {
        return removeDecimal(str, length);
    }
}

// remove trailing decimal of a double as string such as xxx.yyyy
private static String removeDecimal(String doubleStr, int length){
    int dotIndex = doubleStr.indexOf('.');
    return doubleStr.substring(0, Math.max(dotIndex+1, length));
}

Take a look at BigDecimal ( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html ) I use new DecimalFormat("0.00") if我想确保始终显示两位小数,例如 1000.5 将显示为 1000.50。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM