Java 为什么即使为double定义了numberformat异常,也会引发该异常

Java 为什么即使为double定义了numberformat异常,也会引发该异常,java,exception,Java,Exception,Formate是为double right定义的吗?有没有更好的方法不使用大小数?也许是在数学环境下,这个演员阵容不是很好。那么,当halup表示下一个整数时,为什么会抛出它呢 静态字符串abfallEimer(双d,布尔runden) { 字符串s=“”; NumberFormat nf=NumberFormat.getInstance(Locale.derman); nf.setGroupingUsed(真); nf.设置舍入模式(舍入模式半向上); //BigDecimal bd=新的Bi

Formate是为double right定义的吗?有没有更好的方法不使用大小数?也许是在数学环境下,这个演员阵容不是很好。那么,当halup表示下一个整数时,为什么会抛出它呢

静态字符串abfallEimer(双d,布尔runden)
{
字符串s=“”;
NumberFormat nf=NumberFormat.getInstance(Locale.derman);
nf.setGroupingUsed(真);
nf.设置舍入模式(舍入模式半向上);
//BigDecimal bd=新的BigDecimal(d);
//bd=bd.setScale(0,舍入模式,半向上);
//d=bd.longValueExact();
d=新长(nf.格式(d));
如果(d>1000&&!runden)
{
long kaki=数学整数(d/1000)*1000;
如果(d>1000000)
{
kaki/=1000000;
s=nf.format(kaki)+“Mill.”;
返回s;
}
其他的
{
s=nf.格式(kaki);
返回s;
}
}
其他的
{
long kaki=(long)d;
s=NumberFormat.getInstance(Locale.derman).format(kaki);
返回s;
}
}```
线程“JavaFX应用程序线程”java.lang.NumberFormatException中的异常:对于输入字符串:“1,5” 位于java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) 位于java.base/java.lang.Long.parseLong(Long.java:707) 位于java.base/java.lang.Long(Long.java:1344) 位于GBO/gui.country.combo.country.abfallEimer(country.java:82) 位于GBO/gui.country.combo.CountryInfo.lambda$0(CountryInfo.java:124) 在javafx.base/com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:360)上 在


我认为问题出在这方面:

  d = new Long(nf.format(d));
您正在做的是将一个
双精度
转换为一个字符串。。。里面有一个小数点。。。然后尝试将其解析为整数。当然,整数解析器会抛出一个异常

(这可以通过读取您添加的exception+stacktrace来确认,它甚至包括它试图解析的字符串。)

以下是Java 11中用于
Long(String)
的javadoc所说的:

已弃用。很少适合使用此构造函数。使用
parseLong(String)
将字符串转换为
long
原语,或使用
valueOf(String)
将字符串转换为
long
对象

构造一个新分配的
Long
对象,该对象表示字符串参数指示的
Long
值。字符串转换为
long
值的方式与
parseLong
方法对基数10使用的方式完全相同

这就解释了为什么代码会抛出异常

我不清楚的是你在这条线上到底想做什么。如果您只是想将
双精度
转换为
长长度
,有更简单的方法

   long l = (long) d;       // truncates towards zero; see the
                            // JLS 4.2.4 explanation of IEE 754
                            // "round towards zero" conversions.
   long l = Math.round(d);  // rounds, biased to +infinity; see javadoc

请在有关运行时抛出的异常的任何问题中包含stacktrace。
   long l = (long) d;       // truncates towards zero; see the
                            // JLS 4.2.4 explanation of IEE 754
                            // "round towards zero" conversions.
   long l = Math.round(d);  // rounds, biased to +infinity; see javadoc