朙的学习笔记

生活、学习、工作
posts - 12, comments - 11, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
今天,一朋友问了我一个问题:
     数A和数B
     要求A每高于(或低于)B 0.5,数C就相应增加或减少0.5。
     这个算法该怎么样写?
很简单的一个东西。但是要求精度不能丢失。
查了查,原来可以用BigDecimal来实现。

写了个简单的程序:
    public static double oprbigdecimal(double a,double b,double c){
        
//转换为bigdecimal
        BigDecimal bigA = new BigDecimal(Double.toString(a));
        BigDecimal bigB 
= new BigDecimal(Double.toString(b));
        BigDecimal bigC 
= new BigDecimal(Double.toString(c));
        
        
//增加值,如果确定是加减相同值可以优化的。
        BigDecimal step = new BigDecimal("0.5");
        
        
//计算差值
        BigDecimal dif = bigA.subtract(bigB);
        
        
//如果差值在0.5的话。C+0.5
        
//注意,这里比较时就不要用bigdecimal了。会有问题的
        if (dif.doubleValue() == 0.5)
        
{
            bigC 
= bigC.add(step);
        }

        
//差值在-0.5的话。C-0.5
        if (dif.doubleValue() == -0.5)
        
{
            bigC 
= bigC.subtract(step);
        }

        
        
//返回结果
        return bigC.doubleValue();
    }

BigDecimal可以使用String类型的值来初始化对象。
在BigDecimal中会将浮点数转换 整型+精度 的表示方法。
使用add(加)、subtract(减)、multiply(乘)、divide(除)时都会使用整型来计算。精度转为大精度的。
(注意divide除法需要指定保留精度和四舍五入)
这样就可以保护浮点数计算的精度了。


Ming
E-Mail:zengmingcd@163.com


只有注册用户登录后才能发表评论。


网站导航: