java 中的 Bigdecimal 问题

Issue with Bigdecimal in java

我必须计算以下函数:

f(x)=x^3-x-1

我创建了一个名为 "Function" 的 class,在其中,我有一个计算上述函数的方法。

这是我的代码:

double function(double num)
{
    BigDecimal first,second;
    double a,b,c,b_copy;
    a = Math.pow(num, 3);
    b=(double)a-num;
    first=new  BigDecimal(b);
    second=new BigDecimal("1.0");
    first.min(second);
    b_copy=first.doubleValue();
    return b_copy ;
} 

这两行代码我其实有一些问题:

    first.min(second);
    b_copy=first.doubleValue();

例如,当 num 为 0 时 b_copy 必须为 -1 但它是 0。这是为什么?

min(...)方法returns一个BigDecimal,它不会修改它。 试试这个:

first = first.min(second);

此外,如果您想从 first 的值中减去 1(如您的公式所示),请使用 subtract(...) 方法,因为 min(...) 实际上 returns两个BigDecimal的最小值。

first = first.subtract(second);

BigDecimal class 是不可变的。一旦创建就无法更改。

当您更改该对象时,它总是 returns 一个新对象。

first=new  BigDecimal(b);  //  you created an object
second=new BigDecimal("1.0");
first.min(second); // you just modifying it. Hence a new object returned and you never received.

接收新创建的对象,可以这样写

first = first.min(second); 

当你写这个的时候,你正在分配第一个修改后的 BigDecimal back

不仅min(),如果您对 BigDecimal 执行任何操作,您需要重新分配它。