从字符串转换为double将删除尾随零

lei*_*ero 4 java double number-formatting

我正在尝试将字符串格式的双精度列表转换为双精度格式.我通过将它们放入列表并使用该Double.parseDouble(string)方法来完成此操作.

这适用于大多数数字,但是当double包含尾随零时,它会提供不需要的输出,parseDouble方法将其删除.我不希望删除它.

String[] values = {"124.50", "45.801", "-15.210"};
List<Double> nums = new ArrayList<Double>();

for(String s: values)
nums.add(Double.parseDouble(s));
Collections.sort(nums);

for(Double d: nums){
    System.out.print(d + " ");
}
Run Code Online (Sandbox Code Playgroud)

这产生了输出:

-15.21 45.801 124.5
Run Code Online (Sandbox Code Playgroud)

但我想要尾随的零.使用格式化行的问题是我必须在打印值时指定我想要的浮点精度,但我没有任何特定的愿望使数字准确到某一点,只是留下零点如果他们在那里.

我接近这个错吗?

twj*_*twj 7

您可以存储对原始字符串的引用并打印它而不是解析的double

public static void main(String[] args) {
    String[] values = {"124.50", "45.801", "-15.210"};
    List<MyDouble> nums = new ArrayList<MyDouble>();

    for(String s: values)
    nums.add(new MyDouble(s));
    Collections.sort(nums);

    for(MyDouble d: nums){
        System.out.print(d + " ");
    }
}

static class MyDouble implements Comparable<MyDouble> {
    final double val;
    final String string;
    MyDouble(String str) {
        string = str;
        val = Double.parseDouble(str);
    }

    @Override
    public String toString() {
        return string;
    }

    @Override
    public int compareTo(MyDouble o) {
        return (int) (val - o.val);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

-15.210 45.801 124.50
Run Code Online (Sandbox Code Playgroud)