Java类DecimalFormat中,小数点左侧的井号是什么作用?

3

我对这个问题的标题取得不是很好,但是希望通过这篇文章能够更好地解释。

import java.io.*;
import java.text.*;
public class Output {
public static void main(String[] args) {

    /*double number = 438.978;
    /*UpperCase <- naming convention for classes.DecimalFormat x = new DecimalFormat("#.#");
    System.out.println(x.format(number));*/

    double number = 43.97;
    DecimalFormat x = new DecimalFormat(".###");
    System.out.println(x.format(number));

  }
}

不用在意注释。我在11年级计算机科学课上问我的老师,小数点左侧的井号(第11行)是否对双精度浮点数有影响,我们做了一个班级实验,发现它不会改变System.out.println语句的输出结果。

~/workspace/Java/ $ java Output
43.97

有人能解释一下小数点左边的参数的目的吗?有人编写它执行某些操作,所以我只是好奇。


1
哈希符号表示可选数字。尝试格式化3.14159265 - Peter Lawrey
1
除非我错了,这个问题是关于一个类似于*##.###*的格式,其中在.的左边有参数。到目前为止,回答只解释了它的一般含义。 - Mark
3个回答

5

像其他人所说的那样,# 格式化数字但会删除零。

在你的例子中,当你将 .### 应用于一个双精度浮点数,比如 12.34,它原本应该格式化为 12.340,但由于它会删除零,所以实际上并不会这样显示。

当你在小数点前面放置一个 # 时,例如 ###.### 格式化 12.34,原本应该显示为 012.340,但由于它会删除零,所以实际上还是会显示为 12.34

因此,在小数点前面放置一个 # 实际上并没有什么作用。

有一个在小数点前面有用的例子,让你可以看到小数点前面的格式化也可以起作用,那就是 0,它格式化数字但不会删除零,并且也可以在 DecimalFormat 中使用。例如,将模式 000.000 应用于 12.34,结果会显示为 012.340

double d = 12.34;
DecimalFormat df = new DecimalFormat("000.000");
System.out.print(df.format(d));

0# 等模式在 DecimalFormat 中有定义。


1
谢谢你的回答。如果你告诉我小数点前面的井号没有实际作用,我也会很高兴,但是你向我展示了一个在0上运行的案例。以前从未想过可以用这个类来做到这一点。 - Samuel Quansah

0

# 格式化数字,但会删除零。由于您的数字小数点后有两位,第三个格式字符将被忽略。如果您的数字小数点后有四位,则它们将被缩减为三个有效数字。


2
除非我错了,这个问题是关于小数点左侧的参数会做什么,而不是#在一般情况下的含义。 - Mark

0
根据 DecimalFormat文档# 用于有条件地显示数字。
Symbol  Location    Localized?  Meaning
#       Number      Yes         Digit, zero shows as absent

请注意使用的 # 的数量很重要:
DecimalFormat x = new DecimalFormat(".###");
System.out.println(x.format(43.9711111)); // 43.971

1
除非我错了,这个问题是关于小数点左侧的参数会做什么,而不是#在一般情况下的含义。 - Mark
我知道小数点右边的井号是干什么用的,我想知道左边的小数点是干什么用的。 - Samuel Quansah
@SamuelQuansah 请查看我的答案,它涵盖了小数点左边的 # - Mark
@Mark会处理的,因为我只是在学校里匆匆看了一眼。 - Samuel Quansah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接