有没有更好的方法将数字转换为Java中带有可变小数精度的填充字符串?

时间:2015-07-08 19:22:58

标签: java string formatting decimalformat

我已经搜索过,找不到答案。

无论如何,我需要将一个字符串(从一个数字转换)到另一个带小数点的字符串"假设"。这个小数精度需要变化。

例如,让我们说我的伪方法是:

private String getPaddedNumber(String number, Integer decimalPlaces)...

所以用户可以:

 getPaddedNumber("200", 0);      //   "200"
 getPaddedNumber("200.4", 2);    //   "20040"
 getPaddedNumber("200.4", 1);    //   "2004"
 getPaddedNumber("200.4", 4);    //   "2004000"
 getPaddedNumber("200.", 0);     //   "200"  this is technically incorrect but we may get values like that.

现在,我实际上已经编写了一个方法来完成所有这些但它非常强大。然后我想知道," Java已经有了DecimalFormat或已经有这样做的东西吗?

感谢。

修改

这些数字不会以科学记数形式出现。

数字的一些例子:

"55"
"78.9"
"9444.933"

结果永远不会有小数点。

更多例子:

getPaddedNumber("98.6", 2);    //  "9860"
getPaddedNumber("42", 0);      //  "42"
getPaddedNumber("556.7", 5);   //  "55670000"

EDIT2

这是我目前正在使用的代码。它并不漂亮,但似乎有效。但我无法帮助,但觉得我重新发明了轮子。 Java是否有本地化的功能?

private static String getPaddedNumber(String number, int decimalPlaces) {

    if (number == null) return "";
    if (decimalPlaces < 0) decimalPlaces = 0;

    String working = "";
    boolean hasDecimal = number.contains(".");

    if (hasDecimal) {
        String[] split = number.split("\\.");
        String left = split[0];
        String right;

        if (split.length > 1)
            right = split[1];
        else
            right = "0";

        for (int c = 0; c < decimalPlaces - right.length(); c++)
            working += "0";

        return left + right + working;
    }

    for (int c = 0; c < decimalPlaces; c++)
        working += "0";

    return number + working;
}

2 个答案:

答案 0 :(得分:1)

您可以使用scientific notation类将String test = "200.4E2"; int val = new BigDecimal(test).intValue(); double val1 = new BigDecimal(test).doubleValue(); System.out.println("" + val); 转换为可用的数字:

public static void main(String[] args) throws FileNotFoundException {
    String test = "200.4E2";
    String test2 = "200E0";
    String val = new BigDecimal(test).toPlainString();
    String val1 = new BigDecimal(test2).toPlainString();
    System.out.println("" + val);
    System.out.println("" + val1);
}

等...

**** ***** UPDATE

String test = "200.4" + "E" + 2;

您可以将数字连接在一起以获得科学记数法:

private static String getPaddedNumber(String number, int decimalPlaces) {
    String temp = number + "E" + decimalPlaces;
    return new BigDecimal(temp).toPlainString();
}

完整方法

{{1}}

代码来自here

答案 1 :(得分:1)

number * Math.pow(10, decimalPlaces)

这样的东西