我正在尝试将字符串格式的双精度列表转换为双精度格式。我通过将它们放入列表并使用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
但我想要尾随的零。使用格式化行的问题是我必须在打印值时指定我想要的浮点精度,但我没有任何特定的愿望使数字准确到某一点,只是留下零点如果他们在那里。
我接近这个错误吗?
答案 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("###.#");
打印数字时