作业帮 > 综合 > 作业

java程序问题:计算:y=3*1!/1+3^2*2!/2^2+3^3*3!/3^3+...+3^n*n!/n^n(n取

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 11:50:26
java程序问题:计算:y=3*1!/1+3^2*2!/2^2+3^3*3!/3^3+...+3^n*n!/n^n(n取1000+)
我编的程序哪有问题啊?
import java.math.*;
public class 计算下式{
public static void main(String args[]){
BigDecimal sum=new BigDecimal("3.0");
BigDecimal n=new BigDecimal("3.0");
for(int i=2;i
由于需要处理精度比较高的浮点数,所以弃用double类型,改用BigDecimal类来进行数值处理.
其实devide的函数定义如下
BigDecimal.divide(BigDecimal divisor,int scale,RoundingMode roundingMode) ;
参数:scale为小数位数;
参数:roundingMode为小数模式;
所以应该指定scale和roundingMode,保证对于无限小数有足够的范围来表示结果.
1、ROUND_CEILING
如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作.
2、ROUND_DOWN
从不在舍弃(即截断)的小数之前增加数字.
3、ROUND_FLOOR
如果 BigDecimal 为正,则作 ROUND_UP ;如果为负,则作 ROUND_DOWN .
4、ROUND_HALF_DOWN
若舍弃部分> .5,则作 ROUND_UP;否则,作 ROUND_DOWN .
5、ROUND_HALF_EVEN
如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作 ROUND_HALF_DOWN .
6、ROUND_HALF_UP
若舍弃部分>=.5,则作 ROUND_UP ;否则,作 ROUND_DOWN .
7、ROUND_UNNECESSARY
该“伪舍入模式”实际是指明所要求的操作必须是精确的,因此不需要舍入操作.
8、ROUND_UP
总是在非 0 舍弃小数(即截断)之前增加数字.
应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333.解决之道:就是给divide设置精确的小数点divide(xxxxx,2,BigDecimal.ROUND_HALF_EVEN)
BigDecimal除法运算报错,错误如下:
Non-terminating decimal expansion; no exact representable decimal result给个参考 我还没调出来