首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: BigDecimal和Double.NaN

Java: BigDecimal和Double.NaN
EN

Stack Overflow用户
提问于 2015-01-21 10:43:26
回答 5查看 15.3K关注 0票数 13

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

代码语言:javascript
复制
import java.math.*;

public class HelloWorld{

     public static void main(String []args){
            System.out.println(BigDecimal.valueOf(Double.NaN));
     }
}

合理地说,我得到了:

代码语言:javascript
复制
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的方法?

EN

回答 5

Stack Overflow用户

发布于 2015-01-21 11:22:26

有没有一种用Double.NaN表示BigDecimal的方法?

不是的。BigDecimal类不提供NaN、+∞或-∞的表示。

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

您可以考虑创建一个BigDecimal的子类来处理这些“特殊”值,但是将您的“数字”实现为BigDecimal的包装器可能更简单,并将NaN等作为特例。

代码语言:javascript
复制
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
}
票数 16
EN

Stack Overflow用户

发布于 2015-01-21 10:50:02

"NaN“代表”不是一个数字“。如果浮点操作有一些输入参数,从而导致操作产生一些未定义的结果,则会产生"Nan“。例如,0.0除以0.0是算术上未定义的。取负数的平方根也是未定义的。

BigDecimal.valueOf(Double.NaN)它试图将Double.NaN转换为BigDecimal,结果是数字不能转换为BigDecimal,即java.lang.NumberFormatException

票数 4
EN

Stack Overflow用户

发布于 2015-01-21 10:47:40

根据文档是不可能的,请参阅http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28065158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档