如何格式化字符串以使其打印 4 位数字和 2 位小数

4 java string decimal string-formatting

我正在尝试打印出一个始终为 4 位并且有 2 个小数位的双精度数。

例如,如果数字是105.456789String.Format会打印出 0105.45 我理解这%.2f允许两位小数问题。我也明白这%04d允许 4 位数的问题但是,我一生都无法弄清楚如何将两者结合起来。

我试图做一个双String.format 我试图做一个String.format和同时使用%04d%.2f

System.out.println(String.format("Gross Pay:     $%.2f %04d", 105.456789));
Run Code Online (Sandbox Code Playgroud)

我希望输出为 0105.45 但我什至无法编译

Gho*_*ica 5

两件事:首先,您的代码确实可以编译。但它在运行时立即失败:

线程“main”中的异常 java.util.MissingFormatArgumentException: 格式说明符 '%04d'

因为:您在格式规范中使用了两种模式,但只提供了一个值。

是的,%.2f %04d这是两个规格,而不是一个。

(请理解这一点:编译时错误和运行时异常之间有明显的区别。理解这种区别很重要。)

回到“真正”的问题。因此,您不必为一个值使用两种模式,而是必须使用一种规范,例如:

System.out.println(String.format("Gross Pay:     $%07.2f", 105.456789));
Run Code Online (Sandbox Code Playgroud)

总工资:0105.46 美元

“技巧”:“点”前面的那个数字需要考虑整体所需的长度。总的来说,你想要:4 位数字+点+2 位数字,产生 7 个字符。和 0 预先填写。

因此,您的规范需要以“07”开头。