神奇的结果,7.7-7=???

makingjc 2011-11-22 12:20:10
public class Test{
public static void main(String[] args){
double a=7.7,b=7,c;
c=a-b;
System.out.println(c);
}
}


结果等于0.7000000000000002,到底这个2是那来的?为什么得这结果?
我想做计算器,如果计算器算出这个结果就是不对的,但我又不想制这
计算器多少位小数,应该怎么处理?请各位大侠说详细点,谢谢
...全文
212 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿领巾童鞋 2011-11-22
  • 打赏
  • 举报
回复
很正常
噢噢噢噢 2011-11-22
  • 打赏
  • 举报
回复
double 类型的 7.7 不等于 7.7
五哥 2011-11-22
  • 打赏
  • 举报
回复
double float操作 ,需要注意精度的问题
makingjc 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ruanxichengguohuier 的回复:]
去看下java解惑这本书吧。
[/Quote]
谢谢,这本书不错,有空一定看
LucEaspe 2011-11-22
  • 打赏
  • 举报
回复
double 的精度长,用二进制来处理的,你自己用二进制算,你也会算出这样的结果。
yunye 2011-11-22
  • 打赏
  • 举报
回复
float 和 double 等浮点类型计算时经常有0.0000***1的偏差的,我通常是将double转换成BigDecimal进行计算,可以了解下BigDecimal
makingjc 2011-11-22
  • 打赏
  • 举报
回复
不截行吗?因为也不止这个数减这个数得这结果,我怎么知道其他结果要截到几位数?
ec_huyinghuan 2011-11-22
  • 打赏
  • 举报
回复
这个是计算机 二进制处理数字的原因,论坛上有过详细的帖子 你搜索一下
天空龙 2011-11-22
  • 打赏
  • 举报
回复
去看下java解惑这本书吧。
senlinzhiwang 2011-11-22
  • 打赏
  • 举报
回复
你可以把最后的几位截掉啊,这样就不出现这种情况了。
makingjc 2011-11-22
  • 打赏
  • 举报
回复
在线等,请教高手
makingjc 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 makingjc 的回复:]
引用 6 楼 yunye114105 的回复:
float 和 double 等浮点类型计算时经常有0.0000***1的偏差的,我通常是将double转换成BigDecimal进行计算,可以了解下BigDecimal

谢谢你,问题解决了,呵呵
也谢谢各位,让我知道了double 7.7并不等于7.7;
[/Quote]
用这个BigDecimal还是有误差,还是要用到DecimalFormat,不过更精确了,已经可以满足我的要求了。
Apeipo 2011-11-22
  • 打赏
  • 举报
回复
你试试看用二进制表示下 7.7 你就知道了.
fytq813 2011-11-22
  • 打赏
  • 举报
回复
计算机做的本来就是做浮点运算,得到的结果都是近似值
makingjc 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yunye114105 的回复:]
float 和 double 等浮点类型计算时经常有0.0000***1的偏差的,我通常是将double转换成BigDecimal进行计算,可以了解下BigDecimal
[/Quote]
谢谢你,问题解决了,呵呵
也谢谢各位,让我知道了double 7.7并不等于7.7;

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧