Java 为什么即使为double定义了numberformat异常,也会引发该异常
Formate是为double right定义的吗?有没有更好的方法不使用大小数?也许是在数学环境下,这个演员阵容不是很好。那么,当halup表示下一个整数时,为什么会抛出它呢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
静态字符串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