gpt4 book ai didi

Java:BigDecimal 和 Double.NaN

转载 作者:行者123 更新时间:2023-12-01 21:58:45 24 4
gpt4 key购买 nike

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

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

最佳答案

Is there a way to represent Double.NaN in BigDecimal?

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

您可以考虑使用 null ...不过您至少需要 1 三个不同的值来表示 NaN、+∞ 或 -∞,而这是不可能的与null

您可以考虑创建一个 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
}

(以上只是说明性的。我会以不同的方式实现它。)

<小时/>

1 - IEEE 754 规范还定义了正浮点零值和负浮点零值,并且存在多个 NaN 值。这些可以使用 Float.floatToRawIntBitsDouble.doubleToRawLongBits 方法来区分。

关于Java:BigDecimal 和 Double.NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com