当我要在回归后打印出系数时,我在使用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)
如果有人对如何修复代码有任何过激,请告诉我。我想要系数上的两位小数。
谢谢
拉斯
答案 0 :(得分:14)
使用:
DecimalFormat twoDForm = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator('.');
twoDForm.setDecimalFormatSymbols(dfs);
答案 1 :(得分:2)
http://download.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html
以下摘录似乎是您问题的一部分:
获取a的NumberFormat 特定区域设置,包括默认值 locale,调用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对象。模式是一个 简短的规范 各种格式化属性。这些 属性也可以改变 单独通过各种 二传手术方法。没有限制 整数位由此设置 例程,因为那是典型的 最终用户的愿望;使用setMaximumInteger 如果你想设置一个真正的价值。对于 负数,使用秒 模式,用分号分隔
示例“#,#00.0#” - > 1,234.56
这意味着至少2个整数 数字,1分数和a 最多2个小数位。
示例:“#,#00.0#;(#,#00.0#)”for 括号中的否定。
在负面模式中,最小值和 最大计数被忽略;这些是 被认为是积极的 图案。
抛出:NullPointerException - 如果 pattern为null IllegalArgumentException - 如果是 给定的模式无效。
答案 2 :(得分:2)
您遇到了i18n问题。 DecimalFormat
正在使用您的默认语言环境,它将小数分隔符指定为<kbd>,。但是,Double.valueOf
不使用区域设置。它总是希望小数分隔符是。。
如果要解析使用DecimalFormat
格式化的字符串,则需要使用DecimalFormat.parse
答案 3 :(得分:1)
我认为你打算做的是:
private static String s(double d) {
return twoDForm.format(d);
}
答案 4 :(得分:0)
您是否尝试格式化数字?还是围绕它?如果你正在格式化它,那么你的“s”方法(不好的名字,IMO,顺便说一句,但它是私有的,所以这是你的电话)不应该返回java.lang.String
而不是double
吗?
答案 5 :(得分: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);
}