Java:BigDecimal和Double.NaN

时间:2015-01-21 10:43:26

标签: java math numbers bigdecimal

我正在尝试执行以下代码:

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

5 个答案:

答案 0 :(得分:7)

  

有没有办法在BigDecimal中表示Double.NaN?

没有。 BigDecimal类不提供NaN,+∞或-∞的表示。

您可以考虑使用null ...除了您需要至少3个不同的null值来表示3种可能的情况,这是不可能的。

您可以考虑创建一个处理这些“特殊”值的BigDecimal子类,但将“数字”实现为BigDecimal的包装可能更简单,并且可以对待{{1}等特殊情况; e.g。

NaN

答案 1 :(得分:3)

答案 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);
 }