代码优化 麻烦大佬看下69.8+59.8+69.8 为什么等于199.39999999999998 使用了封装

Lin_bai_ 2020-10-15 09:38:31
class Student
{
Backstage information = new Backstage();//创建后台查找系统
void Access (String mation)//查询信息
{
information.cooking(mation); //通知mation查询信息
}
void SaySorry()
{
System.out.println("未找到购买记录");
}
public static void main(String[] args)
{
Student Reception = new Student();
System.out.println("您的购物车里的商品信息:");
Reception.Access("\n");//查询信息如下
}
class Backstage //后台
{
String name;//设置变量
String user;
String monkey;
String jiage;
Backstage()//定义变量
{
this.name = "书名:";
this.user = "作者:";
this.monkey = "价格:";
this.jiage = "总价";
}
void cooking(String mation)//信息
{
System.out.println(name+"《Java Web从入门到精通》,"+"Java从入门到精通(第三版),"+"Java从入门到精通(实例版),"+mation);
System.out.println(user+"明日科技著"+"明日科技著"+"明日科技著"+mation);
System.out.println(monkey+"69.8"+"59.8"+"69.8"+mation);
System.out.println(jiage+(69.8+59.8+69.8)+mation);
}
}
}

运行出来的结果是

您的购物车里的商品信息:
书名:《Java Web从入门到精通》,Java从入门到精通(第三版),Java从入门到精通(实例版),

作者:明日科技著明日科技著明日科技著

价格:69.859.869.8

总价199.39999999999998
两个问题1:能不能用HashSet 第二:为什么等于199.39999999999998 麻烦了
...全文
643 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
meet_aas 2020-10-15
  • 打赏
  • 举报
回复
第一个问题:HashSet想用就用 没有啥限制的 你这里是直接计算输出结果 到没有必要去用HashSet 第二个问题:有精度的数值进行计算 比如float和double类型 有可能会丢失精度 就会造成你上面的结果 一般有精度的计算建议先转BigDecimal类型计算 BigDecimal shu1=new BigDecimal("69.8"); BigDecimal shu2=new BigDecimal("59.8"); BigDecimal shu3=new BigDecimal("69.8"); shu1=shu1.add(shu2).add(shu3); System.out.println(shu1.doubleValue());
明白畅达 2020-10-15
  • 打赏
  • 举报
回复
浮点数采用了二进制系统表示
Lin_bai_ 2020-10-15
  • 打赏
  • 举报
回复
引用 2 楼 meet_zzs 的回复:
第一个问题:HashSet想用就用 没有啥限制的 你这里是直接计算输出结果 到没有必要去用HashSet 第二个问题:有精度的数值进行计算 比如float和double类型 有可能会丢失精度 就会造成你上面的结果 一般有精度的计算建议先转BigDecimal类型计算 BigDecimal shu1=new BigDecimal("69.8"); BigDecimal shu2=new BigDecimal("59.8"); BigDecimal shu3=new BigDecimal("69.8"); shu1=shu1.add(shu2).add(shu3); System.out.println(shu1.doubleValue());
好的 我待会去试下
Lin_bai_ 2020-10-15
  • 打赏
  • 举报
回复
那大佬你看下整体在代码的话是怎么进行修改呢??
KeepSayingNo 2020-10-15
  • 打赏
  • 举报
回复
你这个值类型肯定不能用string去玩,都用BigDecimal 靠谱,人家都。封装好了数学计算方法。第一个问题是随便你用不用

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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