我正在尝试执行以下代码:
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)
有没有办法在BigDecimal中表示 Double.NaN ?
答案 0 :(得分:7)
有没有办法在BigDecimal中表示Double.NaN?
没有。 BigDecimal
类不提供NaN,+∞或-∞的表示。
您可以考虑使用null
...除了您需要至少3个不同的null
值来表示3种可能的情况,这是不可能的。
您可以考虑创建一个处理这些“特殊”值的BigDecimal
子类,但将“数字”实现为BigDecimal
的包装可能更简单,并且可以对待{{1}等特殊情况; e.g。
NaN
答案 1 :(得分:3)
根据文档不可能,请参阅http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29
答案 2 :(得分:3)
“NaN”代表“不是数字”。如果是浮点,则产生“Nan” 操作有一些输入参数导致操作 产生一些不确定的结果。例如,0.0除以0.0即 算术上未定义。取负数的平方根 也是未定义的。
BigDecimal.valueOf(Double.NaN)
它尝试将Double.NaN
转换为BigDecimal
,结果是号码无法转换为BigDecimal
,即java.lang.NumberFormatException
。
答案 3 :(得分:2)
NaN =不是数字。它不是数字,因此无法转换为BigDecimal
答案 4 :(得分:1)
您可以像这样重写代码:
public static void main(String []args){
Double d = ...;
String value;
if (Double.isNaN(d) == true) {
value= "My-NaN-formatting";
} else {
value=BigDecimal.valueOf(d);
}
System.out.println(value);
}