使用NumberFormat格式化数字的FieldPosition

时间:2013-08-25 19:32:04

标签: java number-formatting decimalformat

任何人都可以用简单的英语解释以下API中的以下内容吗?

  

您还可以使用解析和格式化方法的形式   ParsePosition和FieldPosition允许您:

     

逐步解析字符串

     

对齐小数点和其他区域

     

例如,您可以通过两种方式对齐数字:       如果您使用带间距的等宽字体进行对齐,则可以传递   您的格式调用中的FieldPosition,其中field =   INTEGER_FIELD。在输出时,getEndIndex将设置为偏移量   在整数的最后一个字符和小数之间。加   (desiredSpaceCount - getEndIndex)字符串前面的空格。

我没有得到FieldPosition的用途,并且上面发布的API没有帮助(至少对我而言)。 一个显示输出的简单例子就是超级! 提前谢谢!

2 个答案:

答案 0 :(得分:2)

FieldPositionParsePosition类的java文档提供了更多提示。

基本上,如果您不想格式化整个日期或数字,而只需要格式化整个日期或数字,则可以使用FieldPosition(例如,如果您的UI将金额分成几个部分(例如在两个输出字段中给出美元和美分)。如果你需要这样的东西,你可以使用FieldPosition来检索你感兴趣的部分。 对于ParsePosition我现在脑子里没有一个好的用例,也许其他人可以帮忙。

答案 1 :(得分:1)

  

NumberFormat 是所有数字格式的抽象基类。该类提供格式化和解析数字的接口。

要使用数字格式,首先必须获得语言环境实例

然后您可以设置格式的许多属性 。例如,您可以选择显示逗号,限制小数位数,以及设置最小和最大整数长度。如果要显示关于区域设置的'%',则必须使用NumberFormat。只是不要将'%'作为字符串追加到结果中。你想显示像(3745)的paranthesis代替“ - ”来表示负数,然后使用NumberFormat。像这些,有很多用途。

您可以查看JavaDoc了解更多方法

这告诉你该怎么做.. !!

    NumberFormat numberFormat = NumberFormat.getInstance();

    // setting number of decimal places
    numberFormat.setMinimumFractionDigits(2);
    numberFormat.setMaximumFractionDigits(2);

    // you can also define the length of integer
    // that is the count of digits before the decimal point
    numberFormat.setMinimumIntegerDigits(1);
    numberFormat.setMaximumIntegerDigits(10);

    // if you want the number format to have commas
    // to separate the decimals the set as true
    numberFormat.setGroupingUsed(true);

    // convert from integer to String
    String formattedNr = numberFormat.format(12345678L);
    // note that the output will have 00 in decimal place


    // convert from decimal to String
    numberFormat.format(12345.671D);

    // format a String to number
    Number n1 = null;
    Number n2 = null;

      n1 = numberFormat.parse("1,234");
      n2 = numberFormat.parse("1.234");

    // show percentage
    numberFormat = NumberFormat.getPercentInstance();
    numberFormat.format(0.98);
    // answer will be 98%

这是您使用数字格式字段位置的方式。

// Get a default NumberFormat instance.
        NumberFormat numForm = NumberFormat.getInstance();

        // Format some decimals using the pattern supplied above.
        StringBuffer dest1 = new StringBuffer(24);
        StringBuffer dest2 = new StringBuffer(24);
        FieldPosition pos = new FieldPosition(NumberFormat.FRACTION_FIELD);

        dest1 = numForm.format(22.3423D, dest1, pos);
        System.out.println("dest1 = " + dest1);
        System.out.println("FRACTION is at: " + pos.getBeginIndex() +
            ", " + pos.getEndIndex());

        dest2 = numForm.format(64000D, dest2, pos);
        System.out.println("dest2 = " + dest2);
        System.out.println("FRACTION is at: " + pos.getBeginIndex() +
            ", " + pos.getEndIndex());
/*
Output:
dest1 = 22.342
FRACTION is at: 3, 6
dest2 = 64,000
FRACTION is at: 6, 6
*/