菲诗小铺洗发水多少钱:java中BigDecimal与double的精度控制
来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 10:01:54
本篇介绍了在JAVA中如何对double或者float的浮点数进行精度计算,在JAVA中提供了多种参数来实现精度的不同控制方式。具体例子如下:
Java代码![](http://image24.360doc.cn/DownloadImg/2011/03/0116/9593087_1.gif)
Java代码
![](http://image24.360doc.cn/DownloadImg/2011/03/0116/9593087_1.gif)
- /*
- * Created on 2005-6-5
- * Author stephen
- * Email zhoujianqiang AT gmail DOT com
- * CopyRight(C)2005-2008 , All rights reserved.
- */
- package com.soft4j.utility;
- import java.math.BigDecimal;
- /**
- * 与小数位精度(四舍五入等)相关的一些常用工具方法.
- *
- * float/double的精度取值方式分为以下几种:
- * java.math.BigDecimal.ROUND_UP
- * java.math.BigDecimal.ROUND_DOWN
- * java.math.BigDecimal.ROUND_CEILING
- * java.math.BigDecimal.ROUND_FLOOR
- * java.math.BigDecimal.ROUND_HALF_UP
- * java.math.BigDecimal.ROUND_HALF_DOWN
- * java.math.BigDecimal.ROUND_HALF_EVEN
- *
- * @author stephen
- * @version 1.0.0
- */
- public final class RoundTool {
- /**
- * 对double数据进行取精度.
- *
- * For example:
- * double value = 100.345678;
- * double ret = round(value,4,BigDecimal.ROUND_HALF_UP);
- * ret为100.3457
- *
- * @param value
- * double数据.
- * @param scale
- * 精度位数(保留的小数位数).
- * @param roundingMode
- * 精度取值方式.
- * @return 精度计算后的数据.
- */
- public static double round(double value, int scale, int roundingMode) {
- BigDecimal bd = new BigDecimal(value);
- bd = bd.setScale(scale, roundingMode);
- double d = bd.doubleValue();
- bd = null;
- return d;
- }
- /**
- * 测试用的main方法.
- *
- * @param argc
- * 运行参数.
- */
- public static void main(String[] argc) {
- //下面都以保留2位小数为例
- //ROUND_UP
- //只要第2位后面存在大于0的小数,则第2位就+1
- System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
- System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
- //ROUND_DOWN
- //与ROUND_UP相反
- //直接舍弃第2位后面的所有小数
- System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
- System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
- //ROUND_CEILING
- //如果数字>0 则和ROUND_UP作用一样
- //如果数字<0 则和ROUND_DOWN作用一样
- System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
- System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
- //ROUND_FLOOR
- //如果数字>0 则和ROUND_DOWN作用一样
- //如果数字<0 则和ROUND_UP作用一样
- System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
- System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
- //ROUND_HALF_UP [这种方法最常用]
- //如果第3位数字>=5,则第2位数字+1
- //备注:只看第3位数字的值,不会考虑第3位之后的小数的
- System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
- System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
- System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
- System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
- //ROUND_HALF_DOWN
- //如果第3位数字>=5,则做ROUND_UP
- //如果第3位数字<5,则做ROUND_DOWN
- System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
- System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
- System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
- System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
- //ROUND_HALF_EVEN
- //如果第3位是偶数,则做ROUND_HALF_DOWN
- //如果第3位是奇数,则做ROUND_HALF_UP
- System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
- System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
- }
- }
java中BigDecimal与double的精度控制
float与double的范围和精度_本为贵公子,平生实爱才1
面粉的品质与精度
Java中Vector的用法
水产品中药物残留的检测与控制措施
高层结构设计中六个“比”的控制与调整1
高层结构设计中六个“比”的控制与调整
JAVA基础:关于Java栈与堆的思考
java中DAO模式的好处
详细讲解Java中log4j的使用方法
方便 Ajax 与 Java EE 的集成
JSON与JAVA的数据转换
关于A/D的精度、分辨率与LSB误差的大扫盲 -- betbet's Blog
java中字符串操作方法
GIF趣图,这才是真正的“Double KO”。。。 | 乐淘吧
壽司店沒說的事/叫「double」 是兩份還是四份?
java中怎么分离数字的各位(收集)
信息与控制的关系
[转]java中byte转换int时为何与0xff进行与运算
java中byte转换int时为何与0xff进行与运算
java版本号与别名
控制通胀的上中下策
人脑中控制人平衡力的是?
奶糖生产过程中有毒有害物质的控制