首页 > 其他 > 详细

课程作业02——课程中的动手动脑问题

时间:2017-10-07 13:40:30      阅读:194      评论:0      收藏:0      [点我收藏+]

1.为什么double类型的数值进行运算得不到“数学上精确”的结果?

技术分享

技术分享

结论:使用double类型的数值进行计算,其结果是不精确的。

原因:double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

2.解决精度问题可以使用使用BigDecimal类,但在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题解决方法

技术分享

技术分享

原因:double并不能准确的代表BigDecimal 16位有效数以上的数字在使用BigDecimal时创建对象。而BigDecimal所创建的对象不能使用+-*/等传统的算术运算符直接对其对象进行数学运算,必须调用相对应的(f1.add(f2))等方法。 因为方法中的参数必须是BigDecimal的对象,所以定义时应为字符串。

3.以下代码的输出结果是什么?

技术分享

结果:

技术分享

原因:因为输出的是字符串,在语句一中,“+”直接连接两个字符,所以分别输出100和200;而在语句二中,“+”先是进行数值类型的求和运算,再用字符串输出两个整形的和。

 

课程作业02——课程中的动手动脑问题

原文:http://www.cnblogs.com/wxd136/p/7634279.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!