注意导入包,我也不知道是否正确。
答案与正确答案有点出入;应该是 数字转换时出现的误差吧?
恩,有出入是最后的四舍五入导致的
item = numerator.divide(denominator, BigDecimal.ROUND_HALF_UP);
换成这样就会比正确的结果大点。
程序代码:public static void main(String[] args) {
BigDecimal x=new BigDecimal("-2.1");
BigDecimal value=new BigDecimal("0");
BigDecimal item=new BigDecimal("1.0");
BigDecimal numerator=new BigDecimal("1.0");
BigDecimal denominator=new BigDecimal("2.0");
int j=2;
BigDecimal s=new BigDecimal("0");
BigDecimal out=new BigDecimal("1e-5");
int i;
while (item.abs().compareTo(out)>=0) {
value = value.add(item);
numerator = numerator.multiply(x).multiply(x).multiply(new BigDecimal("-1.0"));
s = new BigDecimal("1.0");
for (i = 1; i <= j; i++)
s = s.multiply(new BigDecimal(i));
j = j + 2;
denominator = s;
item = numerator.divide(denominator,BigDecimal.ROUND_HALF_EVEN);
}
System.out.println(value.toString());
System.out.printf("%.5f", value);
}