我正在尝试执行以下代码:
import java.math.*;
public class HelloWorld{
public static void main(String []args){
System.out.println(BigDecimal.valueOf(Double.NaN));
}
}合理地说,我得到了:
Exception in thread "main" java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:470)
at java.math.BigDecimal.<init>(BigDecimal.java:739)
at java.math.BigDecimal.valueOf(BigDecimal.java:1069)
at HelloWorld.main(HelloWorld.java:6) 有没有一种用Double.NaN表示BigDecimal的方法?
发布于 2015-01-21 11:22:26
有没有一种用Double.NaN表示BigDecimal的方法?
不是的。BigDecimal类不提供NaN、+∞或-∞的表示。
你可以考虑使用null ..。除了至少需要3个不同的null值来表示3种可能的情况之外,这是不可能的。
您可以考虑创建一个BigDecimal的子类来处理这些“特殊”值,但是将您的“数字”实现为BigDecimal的包装器可能更简单,并将NaN等作为特例。
public class MyNumber {
private BigDecimal value;
private boolean isNaN;
...
private MyNumber(BigDecimal value, boolean isNaN) {
this.value = value;
this.isNaN = isNan;
}
public MyNumber multiply(MyNumber other) {
if (this.isNaN || other.isNaN) {
return new MyNumber(null, true);
} else {
return new MyNumber(this.value.multiply(other.value), false);
}
}
// etcetera
}发布于 2015-01-21 10:50:02
"NaN“代表”不是一个数字“。如果浮点操作有一些输入参数,从而导致操作产生一些未定义的结果,则会产生"Nan“。例如,0.0除以0.0是算术上未定义的。取负数的平方根也是未定义的。
BigDecimal.valueOf(Double.NaN)它试图将Double.NaN转换为BigDecimal,结果是数字不能转换为BigDecimal,即java.lang.NumberFormatException。
发布于 2015-01-21 10:47:40
根据文档是不可能的,请参阅http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29
https://stackoverflow.com/questions/28065158
复制相似问题