java - 任何数字类型转换为 BigDecimal

标签 java bigdecimal

经过一番折腾后,我想出了以下代码,将任何 Number 子类转换为 BigDecimal。

但是我不相信这段代码是完全正确的。我当然不满意它的冗长!

是否有更好的方法来做到这一点,这种方法是否有任何我需要注意的陷阱(除了我已经意识到的浮点不精确表示问题)?

public DecimalSpec setValue (Number value) {
    if (value instanceof Double) {
        if ((((Double) value).isNaN ())
        || (((Double) value).isInfinite ())) {
            throw new IllegalArgumentException ("Infinite or NaN values not allowed");
        }
    }
    this.value  = new BigDecimal (value.toString ());
    return this;
}

最佳答案

我不知道有什么方法可以用更少的代码编写它,就像在某些可以简化部分代码的方法中一样。但是,我可能会重载 Double 的方法,或者让 BigDecimal 抛出 NumberFormatException 来代替。

BigDecimal 完成工作:

/** May throw NumberFormatException or NullPointerException. */
public DecimalSpec setValue (Number value) {
    this.value  = new BigDecimal (value.toString ());
    return this;
}

Double 重载:

/** May throw NullPointerException. */
public DecimalSpec setValue (Number value) {
    this.value  = new BigDecimal (value.toString ());
    return this;
}

/** May throw NullPointerException or IllegalArgumentException. */
public DecimalSpec setValue (Double value) {
    if (value.isNaN () || value.isInfinite ()) {
        throw new IllegalArgumentException ("Infinite or NaN values not allowed");
    }
    return this.setValue ((Number) value);
}

关于java - 任何数字类型转换为 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542739/

相关文章:

java - BigDecimal 没有做加法操作

java - 嵌套 JSTL 变量名?是否可以?

java - 如何使用正则表达式查找字符串是否至少有一个字符?

java - Intellij Idea Tomcat 和 Spring MVC 模板

java - JDBC 内置函数和准备好的语句

java - 使用十进制将 int 转换为 BigDecimal - Java

java - 当我在 Jaspersoft Studio 中除以两个 BigDecimal 变量时,为什么会得到 null?

java - 这是使用 BigDecimals 舍入的正确行为吗?

java - 排序 BigDecimal

java - 使用 Cucumber 数据表注册 LocalDateTime xstream 转换器