码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-07 14:58:56      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:-418   构建   字符   运算符   无法   数据   字符串   类型   64bit   

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——课程中的动手动脑问题

标签:-418   构建   字符   运算符   无法   数据   字符串   类型   64bit   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!