为了账号安全,请及时绑定邮箱和手机立即绑定

加法里用0.3+0.6(任意带有小数点的都行)

然后发现会得到个Double的数据……竟发现是这样的:

0.3+0.6 = 0.89999999999999999

3.3+6.6 = 9.89999999999999999

0.1+0.2 = 0.30000000000000004


其他等待发现= =

正在回答

1 回答

因为在计算机中进行小数运算是二进制的,而二进制的小数大部分转化成十进制时都成为了无限小数.


十进制中每一位是10^-N次方 而二进制是2^N次方.


比如,0.5=2^-1 0.25=2^-2 那么0.5~0.25之间就要用三位以上二进制小数来表示了.


能转换成有限位2进制小数的10进制小数,小数部分 F 必须满足:
F = (a1)*2^(-1) + (a2)*2^(-2) + (a3)*2^(-3) + …… + (an)*2^(-n),其中 an 表示 0 或者 1,n 不能是无穷大。。


所以Double的数据进行运算时,很多时候都会出现如上情况.


如果打印出规范的结果,可以使用 DecimalFormat 类 如:

  DecimalFormat df= new  DecimalFormat("#0.00");

  double c=a+b;

  String str_c=df.format(c);

这样就得到了两位小数了.

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第一门课(入门篇)
  • 参与学习       312584    人
  • 解答问题       4633    个

想快速掌握Android应用开发基础,选择学习这门课程就对了。

进入课程

加法里用0.3+0.6(任意带有小数点的都行)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信