【问题标题】:What is the difference between #.## and ##.## pattern in Decimal Format?十进制格式的#.## 和##.## 模式有什么区别?
【发布时间】:2014-04-24 08:48:41
【问题描述】:

在我的程序中,我在DecimalFormat 中使用了 #.## 模式,如下所示:

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

我不小心添加了一个额外的#,如下所示:

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

但这不会影响我的输出。我尝试过使用不同的输入组合。输出没有区别。尝试谷歌搜索,但没有正确的解释。

那么使用“#.##”和“##.##”的确切区别是什么?

如果两者相同,为什么在Java中允许?

如果两者不同,为什么两种情况下的输出相同?

编辑:

示例程序:

import java.text.DecimalFormat;

public class Decimals {

    public static void main(String[] args) {

        double d1[] = new double[] {100d, -1d, -0.111111d, 2.555666d, 55555555555d, 0d};

        DecimalFormat df1 = new DecimalFormat("#.##");
        DecimalFormat df2 = new DecimalFormat("##.##");

        for (double d : d1) {
            System.out.println(df1.format(d));
            System.out.println(df2.format(d));
        }
    }

}

输出:

100
100
-1
-1
-0.11
-0.11
2.56
2.56
55555555555
55555555555
0
0

【问题讨论】:

  • 你测试的值是什么,你得到了什么结果?
  • 用示例程序更新了问题。
  • "如果两者相同,为什么在 Java 中允许?" - 因为检测等效模式比仅仅允许它们更难?

标签: java decimalformat


【解决方案1】:

根据DecimalFormat JavaDoc。 “#,十进制,零表示不存在”。

所以额外的 # 将显示另一个数字,除非它是 0。因此这两种格式给出了相同的结果。

编辑:事实上它们都什么都不做,因为它们等同于默认格式。

【讨论】:

    【解决方案2】:

    恕我直言,DecimalFormat 用于格式化整个表示数字并控制数字后的计数

    所以### 在小数点前 (.) 的行为不会有所不同....但如果放在小数点后 (.) 肯定会这样做

    假设 12.234 作为输入数字:

    12.234 和 12.23 会有意义
    但是
    12.234 和 2.234 不会。

    所以重点放在小数点后的格式和值上,例如:

    • setMinimumFractionDigits(0);

    • setMaximumFractionDigits(2);

    • setRoundingMode

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      相关资源
      最近更新 更多