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

时间:2014-01-14 07:04:25

标签: 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 + " ");
}

这会产生输出:

-15.21 45.801 124.5

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

我接近这个错误吗?

4 个答案:

答案 0 :(得分:7)

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

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

结果:

-15.210 45.801 124.50

答案 1 :(得分:1)

您可以使用BigDecimal来处理这些值。 BigDecimal保留尾随零。

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

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

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

答案 2 :(得分:0)

如果您总是想要n个十进制数字,则可以执行以下操作:

final DecimalFormat df = new DecimalFormat("#.000");
for (Double d : nums) {
    System.out.print(df.format(d) + " ");
}

更具体地说,这个解决方案适合你,但正如@BrianRoach在他的评论中提到的那样,在谈论实际的双数时,没有一个尾随的零。

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

for (final String s : values) {
    double d = Double.parseDouble(s);
    nums.add(d);
    bkpNums.add(d);
}
Collections.sort(nums);

for (Double d : nums) {
    System.out.print(values[bkpNums.indexOf(d)] + " ");
}

答案 3 :(得分:-1)

尝试使用:

DecimalFormat df = new DecimalFormat("###.#");

打印数字时