12,javase代码实战-循环控制——用while计算1+1/ 2!+1/ 3!+....+1/ 10!(三)
2018-02-25 16:59
363 查看
问题介绍:
计算1+1/2!+1/3!+….+1/10!。
问题分析:
因为存在小数,所以使用基本数据类型进行运算,肯定会丢失精度,所以要使用java中的BigDecimal实现。
代码实现:
效果图:
总结:
1,实现累加时,只用sum.add()是不能实现累加的,因为执行加减乘除都是返回一个新的对象的,不在保存到原来的sum对象中。因为BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以a.add(b);虽然做了加法操作,但是a并没有保存加操作后的值,正确的用法应该是a=a.add(b);
2,在new BigDecimal()时,传入的参数应是整型或者字符串的,若是浮点型的话,也会造成二进制表达不精确的问题。
3,Non-terminating decimal expansion; no exact representable decimal result异常,说明无法结束的除法表达式;没有精确的除结果,要为其指定精确的小数位数,舍入模式。
计算1+1/2!+1/3!+….+1/10!。
问题分析:
因为存在小数,所以使用基本数据类型进行运算,肯定会丢失精度,所以要使用java中的BigDecimal实现。
代码实现:
/** * 1,创建sum 保存累加和 * 2,外层for循环用于控制累加的次数 * 内层for循环实现分母的阶层。 * 使用BigDecimal来实现计算 * */ int n=10; int k =1; BigDecimal sum =new BigDecimal("0");//总和 BigDecimal fz =new BigDecimal("1.0");//分子1 for(int i =1;i<=n;i++){ k=1; for(int j =1;j<=i;j++){//计算 阶乘的分母 k*=j; } //实现累加 保留小数5位 舍入模式(四舍五入) sum =sum.add(fz.divide(new BigDecimal(k),5, BigDecimal.ROUND_HALF_EVEN)); } System.out.println("和为:"+sum);
效果图:
总结:
1,实现累加时,只用sum.add()是不能实现累加的,因为执行加减乘除都是返回一个新的对象的,不在保存到原来的sum对象中。因为BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以a.add(b);虽然做了加法操作,但是a并没有保存加操作后的值,正确的用法应该是a=a.add(b);
2,在new BigDecimal()时,传入的参数应是整型或者字符串的,若是浮点型的话,也会造成二进制表达不精确的问题。
3,Non-terminating decimal expansion; no exact representable decimal result异常,说明无法结束的除法表达式;没有精确的除结果,要为其指定精确的小数位数,舍入模式。
相关文章推荐
- 10,javase代码实战-循环控制——使用while与自增运算符实现遍历数组(一)
- 14,javase代码实战-循环控制——foreach循环的使用(五)
- 15,javase代码实战-循环控制——循环的终止与过滤(六)
- 11,javase代码实战-循环控制——for循环实现九九乘法表(二)
- 13,javase代码实战-循环控制——for循环输出空心的菱形(四)
- 第4章 流程控制----编写Java程序,使用while循环语句计算1+1/2!+1/3!+...+1/20!之和
- Java基础应用之循环控制(用while循环计算1+1/2!+1/3!…1/20!)
- JavaSE (七)循环控制语句:while、do....while、for,break和continue用法
- 9,javase代码实战-条件语句——switch语句根据用户消费金额计算折扣(四)
- Matlab编程与数据类型 -- 循环控制语句之二:while/end
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- _10_do_while循环__
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- DC4C代码阅读(10)——计算节点基础结构
- javascript基础(控制流程(循环 while,for))(十二)
- 流程控制--while循环
- 使用while循环,计算2+4+6+...+100
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- 7.使用while循环,计算2+4+6+...+100
- Python第二篇【if语句、while循环、for循环、代码注释、中文乱码处理】