JAVA中double格式化控制精度小数位数,float同理
来源:互联网 发布:淘宝怎么用手机买2手 编辑:程序博客网 时间:2024/05/01 00:42
JAVA中如何对浮点数进行精度控制,在JAVA中提供了多种参数来实现精度的不同控制方式。以double为例,float同理
转自http://stephen830.iteye.com/blog/260776
- /*
- * 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的精度取值方式分为以下几种: <br>
- * java.math.BigDecimal.ROUND_UP <br>
- * java.math.BigDecimal.ROUND_DOWN <br>
- * java.math.BigDecimal.ROUND_CEILING <br>
- * java.math.BigDecimal.ROUND_FLOOR <br>
- * java.math.BigDecimal.ROUND_HALF_UP<br>
- * java.math.BigDecimal.ROUND_HALF_DOWN <br>
- * java.math.BigDecimal.ROUND_HALF_EVEN <br>
- *
- * @author stephen
- * @version 1.0.0
- */
- public final class RoundTool {
- /**
- * 对double数据进行取精度.
- * <p>
- * For example: <br>
- * double value = 100.345678; <br>
- * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>
- * ret为100.3457 <br>
- *
- * @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
- }
- }
0 0
- JAVA中double格式化控制精度小数位数,float同理
- JAVA中double格式化控制精度小数位数,float同理
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- JAVA中控制double和float的精度
- java控制float和double的精度
- java控制float类型的小数位数
- java 中格式化小数位数
- [JAVA] float,double精度
- Java中float和double精度
- java中float,double的精度问题
- Java中控制小数位数
- java中控制小数位数
- C++ double 小数精度控制
- float double 指定小数位数输出
- 转:java float double精度
- java double float 精度计算
- Java中格式化小数—小数有效位数
- Cuda(1):安装
- 5.22 Java第二课 类和对象
- java异常练习
- WindowsXP SP3 AFD.sys 本地拒绝服务漏洞的挖掘过程
- 一小时包教会 —— webpack 入门指南
- JAVA中double格式化控制精度小数位数,float同理
- 线程的阻塞+通过外部干涉终止一个线程
- MATLAB计算矩阵间的欧式距离(不用循环!)
- 关于黑马程序员的自述
- 系统日志的处理方法和系统日志的处理平台
- 营业执照ocr识别sdk
- Codeforces 217E Alien DNA (树状数组求第k大)
- eclipse中查看框架的源码方式
- DES密码算法