【问题标题】:NumberFormat setMaximumFractionDigits methodNumberFormat setMaximumFractionDigits 方法
【发布时间】:2012-12-25 05:03:12
【问题描述】:

我正在尝试NumberFormat 类的方法和功能,但我得到了一个奇怪的结果。我编译并运行以下程序:

public static void main(String[] args) {

Locale loc = Locale.US;
    NumberFormat nf = NumberFormat.getInstance(loc);
    System.out.println("Max: "+nf.getMaximumFractionDigits());
    System.out.println("Min: "+nf.getMinimumFractionDigits());
    try {
        Number d = nf.parse("4527.9997539");
        System.out.println(d);
        // nf.setMaximumFractionDigits(4);
        System.out.println(nf.format(4527.999753));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

输出是:

Max: 3
Min: 0
4527.9997539
4,528

这意味着它不考虑任何小数位。如果我取消注释该行:

nf.setMaximumFractionDigits(4);

输出是:

Max: 3
Min: 0
4527.9997539
4,527.9998

换句话说,它工作正常。方法 setMaximumFractionDigits() 实际发生了什么并且在第一种情况下它没有带来包含 3 个小数位的数字?

【问题讨论】:

  • 你的意思是手动设置数字的小数位吗?

标签: java number-formatting


【解决方案1】:

我终于找到了答案。方法setMaximumFractionDigits() 仅对方法format() 有效。它与parse() 无关。在我的代码片段中,我在手动将小数位数设置为 4 后使用方法 format(),因此会影响结果。

【讨论】:

    【解决方案2】:

    如果您想手动设置小数位数,请使用以下选项之一:

    首先:

      //sets 'd' to 3 decimal places & then assigns it to 'formattedNum'
       String formattedNum = String.format("%.3f", d); //variable 'd' taken from your code above 
    

      //declares an object of 'DecimalFormat'
       DecimalFormat aDF = new DecimalFormat("#.000"); 
    
      //formats value stored in 'd' to three decimal places
       String fomrattedNumber = aDF.format(d); 
    

    在我看来,第二个选项最适合您的情况。

    【讨论】:

      【解决方案3】:

      从解析的字符串创建的数字有更多的小数位数。但是当您尝试输出时,它使用格式的MaximumFractionDigits 从任何给定的数字创建字符串。

      【讨论】:

      • 我仍然无法理解问题的原因。即使我手动将最大位数(通过 setMaximumFractionDigits 方法)设置为 3,它也会返回一个没有小数部分的数字。我认为它应该是 3 位数的一小部分。
      猜你喜欢
      • 2015-03-05
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      相关资源
      最近更新 更多