注意导入包,我也不知道是否正确。
答案与正确答案有点出入;应该是 数字转换时出现的误差吧?
恩,有出入是最后的四舍五入导致的
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); }