本站首页    管理页面    写新日志    退出

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

  如果你忍了,欺负你的人将来可能就进监狱了。如果你反击,欺负你的人将来可能就获选十大杰出青年了。

        QQ: 3159671

http://greenboy.javaeye.com/

http://blog.sina.com.cn/u/1278341164 小鸟吹烟


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:小鸟吹烟
日志总数:157
评论数量:424
留言数量:-1
访问次数:1257151
建立时间:2006年10月23日




[J2SE]java实现精确的四舍五入
文章收藏,  网上资源

tone 发表于 2007/3/12 13:05:25

 http://buick.javaeye.com/blog/23350 源文件Arith.java:    import java.math.BigDecimal;       /**    * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精    * 确的浮点数运算,包括加减乘除和四舍五入。    */      public class Arith{        //默认除法运算精度       private static final int DEF_DIV_SCALE = 10;        //这个类不能实例化          private Arith(){        }           /**        * 提供精确的加法运算。        * @param v1 被加数        * @param v2 加数        * @return 两个参数的和        */       public static double add(double v1,double v2){            BigDecimal b1 = new BigDecimal(Double.toString(v1));            BigDecimal b2 = new BigDecimal(Double.toString(v2));            return b1.add(b2).doubleValue();           }           /**        * 提供精确的减法运算。        * @param v1 被减数        * @param v2 减数        * @return 两个参数的差        */          public static double sub(double v1,double v2){            BigDecimal b1 = new BigDecimal(Double.toString(v1));            BigDecimal b2 = new BigDecimal(Double.toString(v2));            return b1.subtract(b2).doubleValue();        }           /**        * 提供精确的乘法运算。        * @param v1 被乘数        * @param v2 乘数        * @return 两个参数的积        */       public static double mul(double v1,double v2){            BigDecimal b1 = new BigDecimal(Double.toString(v1));            BigDecimal b2 = new BigDecimal(Double.toString(v2));            return b1.multiply(b2).doubleValue();        }           /**        * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到        * 小数点以后10位,以后的数字四舍五入。        * @param v1 被除数        * @param v2 除数        * @return 两个参数的商        */       public static double div(double v1,double v2){            return div(v1,v2,DEF_DIV_SCALE);        }           /**        * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指        * 定精度,以后的数字四舍五入。        * @param v1 被除数        * @param v2 除数        * @param scale 表示表示需要精确到小数点以后几位。        * @return 两个参数的商        */       public static double div(double v1,double v2,int scale){            if(scale<0){                throw new IllegalArgumentException(                    "The scale must be a positive integer or zero");            }            BigDecimal b1 = new BigDecimal(Double.toString(v1));            BigDecimal b2 = new BigDecimal(Double.toString(v2));            return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();        }           /**        * 提供精确的小数位四舍五入处理。        * @param v 需要四舍五入的数字        * @param scale 小数点后保留几位        * @return 四舍五入后的结果        */       public static double round(double v,int scale){            if(scale<0){                throw new IllegalArgumentException(                    "The scale must be a positive integer or zero");            }            BigDecimal b = new BigDecimal(Double.toString(v));            BigDecimal one = new BigDecimal("1");            return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();        }    };   


阅读全文(8483) | 回复(2) | 编辑 | 精华
 


回复:java实现精确的四舍五入
文章收藏,  网上资源

tone发表评论于2007/3/13 11:06:41

BigDecimal.ROUND_HALF_DOWN 如果最后一位<=5则舍弃,如果>5, 向前进一位。如7.5->7;7.6->8;-7.5->-7           BigDecimal.ROUND_HALF_UP 如果最后一位<5则舍弃,如果>=5, 向前进一位。反之舍弃。如7.5->8;7.4->7;-7.5->-8             BigDecimal.ROUND_UP       最后一位如果大于0,则向前进一位,正负数都如此。           BigDecimal.ROUND_DOWN 最后一位不管是什么都会被舍弃。           BigDecimal.ROUND_CEILING 如果是正数,按ROUND_UP处理,如果是负数,按照ROUND_DOWN处理。例如7.1->8; -7.1->-7;所以这种近似的结果都会>=实际值。           BigDecimal.ROUND_FLOOR 跟BigDecimal_ROUND_CEILING相反。例如7.1->7;-7.1->-8。这种处理的结果<=实际值。           BigDecimal.ROUND_HALF_EVEN 如果倒数第二位是奇数,按照BigDecimal.ROUND_HALF_UP处理,如果是偶数,按照 BigDecimal.ROUND_HALF_DOWN来处理。如7.5->8;8.5->8;7.4->7;-7.5->-8 


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:java实现精确的四舍五入
文章收藏,  网上资源

tone发表评论于2007/3/13 11:05:46

 public static void main(String[] a){     BigDecimal deSource = new BigDecimal(1.56);     BigDecimal iRound= deSource.setScale(0,BigDecimal.ROUND_HALF_UP);     BigDecimal iRound2= deSource.setScale(1,BigDecimal.ROUND_HALF_UP);     System.out.println(iRound);     System.out.println(iRound2); }

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144771410 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号