Java 如何在字符串中输出一个双精度到2个十进制的位置?

Java 如何在字符串中输出一个双精度到2个十进制的位置?,java,formatting,decimal,Java,Formatting,Decimal,此程序使用itemListener进行温度转换 outputValue是受保护的双精度 outputString也受保护 输出是一个JTextField 并且输出类型是受保护的字符 public void itemStateChanged(ItemEvent e) { inputValue = Double.parseDouble(textField.getText()); //the input value is converted to the outputValue b

此程序使用itemListener进行温度转换

outputValue是受保护的双精度

outputString也受保护

输出是一个JTextField

并且输出类型是受保护的字符

public void itemStateChanged(ItemEvent e) {
    inputValue =  Double.parseDouble(textField.getText());

    //the input value is converted to the outputValue based on the outputType

    outputString = String.valueOf(outputValue);            //set output value to string
    outputString = String.format(" %0.2f", outputValue);   //format to .00

    output.setText( outputString + (char) 0x00B0 + outputType);}
当我运行程序时,我得到:

Exception in thread "AWT-EventQueue-0" java.util.MissingFormatWidthException: 0.2f,

有一长串(未知来源)

尝试类似于
“%03.2f”
的方法,第一个0只是一个用前导零填充数字的标志。它后面必须有宽度规格。

使用格式字符串
%.2f

String.format(" %.2f", outputValue);
试试这个

String outputType = " celsius";
DecimalFormat format = new DecimalFormat("###,###.##");
output.setText( format.format(Double.parseDouble(textField.getText()))+ outputType);

您好,您选择的格式似乎有误,正确的格式是

outputString = String.format(" %.2f", outputValue); 

格伦·莱恩(Glenn Lane)的公认答案回答了这个问题,即如何正确地做到这一点

至于发生异常的原因,仔细搜索会发现
0
标志:

要求用前导零填充输出,以 任何符号或基数指示符后面的最小字段宽度,除了 转换NaN或无穷大时。如果未提供宽度,则 将引发MissingFormatWidthException

因此,
%0.2f
是说数字应该用零填充到小数点前的
n
位(小数点后应该显示两位数字)。但是
n
未指定


这就是为什么
%0.2f
抛出
MissingFormatWidthException
,而
%2f
没有抛出的原因。

在Java8中,如果不添加宽度规范,您将在java.util.Formatter$FormatSpecifier.checkNumeric(Formatter.java:3022)处得到java错误java.util.MissingFormatWidthException:%0.2f…知道是什么导致了异常吗?异常的名称表示缺少格式宽度,但OP有
%0.2f
,其中2是宽度,对吗?