Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7068641
  • 博文数量: 702
  • 博客积分: 10821
  • 博客等级: 上将
  • 技术积分: 12031
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-02 10:41
个人简介

中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。

文章分类

全部博文(702)

分类: Java

2013-06-14 17:22:47

以前用的int,long多一些。今天用到了Bigdecimal。一点体会:
判断一个数是否大于99.9一般的想法是:
BigDecimal aa = new BigDecimal(99.99).setScale(1, BigDecimal.ROUND_HALF_UP);
        if (aa.compareTo(new BigDecimal(99.9)) == 1){
            System.out.println("Largerl!!!");
        } else if (aa.compareTo(new BigDecimal(99.9)) == 0){
            System.out.println("Equal!!!");
        } else if (aa.compareTo(new BigDecimal(99.9)) == -1){
            System.out.println("Lower!!!");
        }

第一次:
Largerl!!!
第二次:
Lower!!!

http://hiyachen.cublog.cn

郁闷吧。
我把(new BigDecimal(99.9))打印出来:
结果出乎预料:
第一次:
99.9000000000000489734
第二次:
99.899999999999154

发现问题解决很简单:
 if (aa.compareTo(new BigDecimal(99.9)) == 1){
改成:
 if (aa.compareTo(new BigDecimal(99.9).setScale(1, BigDecimal.ROUND_HALF_UP)) == 1){

即小数位数一样时再check

over.

阅读(2141) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~