Java 如何在字符串中输出一个双精度到2个十进制的位置?
此程序使用itemListener进行温度转换 outputValue是受保护的双精度 outputString也受保护 输出是一个JTextField 并且输出类型是受保护的字符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
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是宽度,对吗?