JAVA中double格式化控制精度小数位数,float同理
来源:互联网 发布:海口网络推广公司 编辑:程序博客网 时间:2024/05/22 08:20
Java中如何对浮点数进行精度控制,在JAVA中提供了多种参数来实现精度的不同控制方式。以double为例,float同理
转自http://stephen830.iteye.com/blog/260776
Java代码
/* * 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中格式化小数—小数有效位数
- CC2640R2F BLE5.0 开发环境搭建
- poll源码剖析
- python 字典
- hdu 1062 Text Reverse
- 手机端页面测试神器--Browsersync
- JAVA中double格式化控制精度小数位数,float同理
- 编译cmake 2.8.10.2报错:undefined reference to symbol 'keypad'
- webpack的基本使用(一)
- CC2640R2F BLE5.0 下载运行第一个程序(simple_peripheral)
- 责任链模式
- ±1RMQ(约束RMQ)
- 共享 load事件--addLoadEvent
- ArcGIS for Android 离线数据空间分析--叠加分析
- springboot【8】数据访问之JdbcTemplate访问数据库