繁体   English   中英

使用DecimalFormat的问题

[英]Problems using DecimalFormat

当我要在回归后打印出系数时,我在使用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)  

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

谢谢

拉尔斯

采用:

    DecimalFormat twoDForm = new DecimalFormat("#.##");
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setDecimalSeparator('.');
    twoDForm.setDecimalFormatSymbols(dfs);

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方法:

applyPattern

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

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

这意味着至少2个整数位,1个小数位,最多2个小数位。

示例:“#,#00.0#;(#,#00.0#)”表示括号中的底片。

在负模式中,忽略最小和最大计数; 这些被认为是以积极模式设定的。

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

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

如果你想分析与格式化字符串DecimalFormat ,那么你需要使用DecimalFormat.parse

我想你打算做的是:

private static String s(double d) {
   return twoDForm.format(d);
}

检查您的区域设置。

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);
        }

你想格式化数字吗? 还是围绕它? 如果你正在格式化它,不应该是你的“s”方法(坏名称IMO,顺便说一句,但它是私有的,所以这是你的调用)返回java.lang.String而不是double

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM