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 执行任何操作,您需要重新分配它。
我必须计算以下函数:
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 执行任何操作,您需要重新分配它。