格式化toString()方法中的double值(相对于小数)

时间:2014-05-21 19:06:10

标签: java string formatting format double

这是一个相当简单的问题。我有一类对象Item,它构造了TestItem类中声明的对象。重写的toString()方法使用DecimalFormat类来格式化我的双值price。当我的toString()方法编写时,我的输出以这种方式生成:

item output

我希望格式化中的修改是关于小数的对齐,我该如何实现?

     public String toString() {
        DecimalFormat format = new DecimalFormat("##.00");
        String add = "";
        if(itemName.length() < 7) {
            add = "\t";
        }
        return itemID + " \t " + itemName + add + "\t" + inStore  + "\t   $" + format.format(price);
    }

public class TestItem {
    public static void main(String [] args) {
        Item list[] = { new Item(1011, "Air Filters", 200, 10.5),
                        new Item(1034, "Door Knobs", 60, 21.5),
                        new Item(1101, "Hammers", 90, 9.99),
                        new Item(1600, "Levels", 60, 19.99),
                        new Item(1500, "Ceiling Fans", 100, 59),
                        new Item(1201, "Wrench Sets", 55, 80) };
        printMovies(list);
    }

    public static void printMovies(Item list[]) {
        System.out.println("itemID\t itemName\tinStore\t    price");
        System.out.println("------------------------------------------");
        for(Item token : list) {
            System.out.println(token);
        }
        System.out.println();
    }
}

这不是完整的代码;只有相关内容。

2 个答案:

答案 0 :(得分:0)

我使用00.00作为模式,然后你会得到一个像09.53一样的字符串 然后你看,如果第一个和第二个字符为'0',如果是,则用空格替换它们。你应该使用一个新的字符串对象,因为你不能改变字符串的字符。

答案 1 :(得分:0)

您可以使用String.format来控制格式。遗憾的是,我无法直接将其与自定义模式相结合,但您可以将它们组合起来。例如:

import java.math.*;
import java.text.*;

public class Test {
    public static void main(String[] args) {
        showPrice(new BigDecimal("123.456"));
        showPrice(new BigDecimal("11.12"));
        showPrice(new BigDecimal("10.5"));
        showPrice(new BigDecimal("1.5"));
        showPrice(new BigDecimal("0.5"));
    }

    static void showPrice(BigDecimal price) {
        DecimalFormat format = new DecimalFormat("0.00");
        String text = String.format("Price: $%5s", format.format(price));
        System.out.println(text);
    }
}

输出:

Price: $123.46
Price: $11.12
Price: $10.50
Price: $ 1.50
Price: $ 0.50

请注意:

  • $符号仍然对齐(后空格
  • “广泛”的价格看起来并不好,但是你可以做的很少
  • 使用"0.00"代替"##.##表示最后价格为“0.50”而不是“.5”

您可以使用String.format格式化所有数据,使用格式说明符控制字段宽度。您可能希望使用空格而不是制表符,以便更容易确保对齐。