3

DecimalFormat当我要在回归后打印出系数时,我遇到了问题。

这是代码中面临问题的部分;

DecimalFormat twoDForm = new DecimalFormat("0.00");   
private double s(double d){  
    return Double.valueOf(twoDForm.format(d));  
}  

这是eclipse中的错误消息;

Exception in thread "main" java.lang.NumberFormatException: For input string: "0,16"  
 at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)  
 at java.lang.Double.valueOf(Unknown Source)  
 at model.ARF2.s(ARF2.java:126)  
 at model.ARF2.printBestModel(ARF2.java:114)  
 at testing.testclass3.bestForecastingModel(testclass3.java:69)  
 at testing.testclass3.main(testclass3.java:36)  

如果有人对如何修复代码有任何建议,请告诉我。我想要我的系数有两位小数。

谢谢

拉斯

4

6 回答 6

19

利用:

    DecimalFormat twoDForm = new DecimalFormat("#.##");
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setDecimalSeparator('.');
    twoDForm.setDecimalFormatSymbols(dfs);
于 2012-05-24T04:00:10.390 回答
2

http://download.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html

以下摘录似乎是您的问题的一部分:

要获取特定语言环境(包括默认语言环境)的 NumberFormat,请调用 NumberFormat 的工厂方法之一,例如 getInstance()。通常,不要直接调用 DecimalFormat 构造函数,因为 NumberFormat 工厂方法可能返回 DecimalFormat 以外的子类。如果您需要自定义格式对象,请执行以下操作:

 NumberFormat f = NumberFormat.getInstance(loc);
 if (f instanceof DecimalFormat) {
     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
 }

您可能想要使用 applyPattern 方法:

应用模式

public void applyPattern(String pattern) 将给定的模式应用到这个 Format 对象。模式是各种格式属性的简写规范。这些属性也可以通过各种 setter 方法单独更改。此例程设置的整数位数没有限制,因为这是最终用户的典型愿望;如果要设置实数值,请使用 setMaximumInteger。对于负数,使用第二种模式,用分号分隔

示例“#,#00.0#”-> 1,234.56

这意味着最少 2 个整数位、1 个小数位和最多 2 个小数位。

示例:“#,#00.0#;(#,#00.0#)”表示括号中的否定词。

在负数模式中,最小和最大计数被忽略;这些被假定为正模式。

抛出: NullPointerException - 如果模式为 null IllegalArgumentException - 如果给定模式无效。

于 2010-09-17T13:23:31.680 回答
2

您遇到了 i18n 问题。DecimalFormat正在使用您的默认语言环境,它将小数点分隔符指定为,. 但是,Double.valueOf不使用语言环境。它总是期望小数点分隔符是..

如果要解析格式化的字符串,DecimalFormat则需要使用DecimalFormat.parse

于 2010-09-17T16:00:34.950 回答
1

我想你打算做的是:

private static String s(double d) {
   return twoDForm.format(d);
}
于 2010-09-17T13:28:51.077 回答
0

检查您的语言环境。

DecimalFormat twoDForm = new DecimalFormat("0.00");   
    private double s(double d){ 

    String doubleString =  displayNumberAmount(twoDForm.format(d));
        return Double.valueOf(doubleString);  
    } 

    public static String displayNumberAmount(String amount) {

            NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.CANADA_FRENCH);

            Number number = 0;

            try {
                number = numberFormat.parse(amount);

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return String.format(Locale.US, "%1$,.2f", number);
        }
于 2014-01-29T08:57:19.720 回答
0

您是否尝试格式化数字?还是圆的?如果你正在格式化它,你的“s”方法(坏名IMO,顺便说一句,但它是私人的,所以这是你的电话)不应该返回 ajava.lang.String而不是 adouble吗?

于 2010-09-17T13:28:21.267 回答