`

JAVA中控制double和float的精度

    博客分类:
  • java
阅读更多

本篇介绍了在JAVA中如何对double或者float的浮点数进行精度计算,在JAVA中提供了多种参数来实现精度的不同控制方式。具体例子如下: 

转自http://stephen830.iteye.com/blog/260776

Java代码 
  1. /* 
  2.  * Created on 2005-6-5 
  3.  * Author stephen 
  4.  * Email zhoujianqiang AT gmail DOT com 
  5.  * CopyRight(C)2005-2008 , All rights reserved. 
  6.  */  
  7. package com.soft4j.utility;  
  8.   
  9. import java.math.BigDecimal;  
  10.   
  11. /** 
  12.  * 与小数位精度(四舍五入等)相关的一些常用工具方法. 
  13.  *  
  14.  * float/double的精度取值方式分为以下几种: <br> 
  15.  * java.math.BigDecimal.ROUND_UP <br> 
  16.  * java.math.BigDecimal.ROUND_DOWN <br> 
  17.  * java.math.BigDecimal.ROUND_CEILING <br> 
  18.  * java.math.BigDecimal.ROUND_FLOOR <br> 
  19.  * java.math.BigDecimal.ROUND_HALF_UP<br> 
  20.  * java.math.BigDecimal.ROUND_HALF_DOWN <br> 
  21.  * java.math.BigDecimal.ROUND_HALF_EVEN <br> 
  22.  *  
  23.  * @author stephen 
  24.  * @version 1.0.0 
  25.  */  
  26. public final class RoundTool {  
  27.   
  28.     /** 
  29.      * 对double数据进行取精度. 
  30.      * <p> 
  31.      * For example: <br> 
  32.      * double value = 100.345678; <br> 
  33.      * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br> 
  34.      * ret为100.3457 <br> 
  35.      *  
  36.      * @param value 
  37.      *            double数据. 
  38.      * @param scale 
  39.      *            精度位数(保留的小数位数). 
  40.      * @param roundingMode 
  41.      *            精度取值方式. 
  42.      * @return 精度计算后的数据. 
  43.      */  
  44.     public static double round(double value, int scale, int roundingMode) {  
  45.         BigDecimal bd = new BigDecimal(value);  
  46.         bd = bd.setScale(scale, roundingMode);  
  47.         double d = bd.doubleValue();  
  48.         bd = null;  
  49.         return d;  
  50.     }  
  51.   
  52.     /** 
  53.      * 测试用的main方法. 
  54.      *  
  55.      * @param argc 
  56.      *            运行参数. 
  57.      */  
  58.     public static void main(String[] argc) {  
  59.         //下面都以保留2位小数为例  
  60.           
  61.         //ROUND_UP  
  62.         //只要第2位后面存在大于0的小数,则第2位就+1  
  63.         System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35  
  64.         System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35  
  65.         //ROUND_DOWN  
  66.         //与ROUND_UP相反  
  67.         //直接舍弃第2位后面的所有小数  
  68.         System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34  
  69.         System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34  
  70.         //ROUND_CEILING  
  71.         //如果数字>0 则和ROUND_UP作用一样  
  72.         //如果数字<0 则和ROUND_DOWN作用一样  
  73.         System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35  
  74.         System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34  
  75.         //ROUND_FLOOR  
  76.         //如果数字>0 则和ROUND_DOWN作用一样  
  77.         //如果数字<0 则和ROUND_UP作用一样  
  78.         System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34  
  79.         System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35  
  80.         //ROUND_HALF_UP [这种方法最常用]  
  81.         //如果第3位数字>=5,则第2位数字+1  
  82.         //备注:只看第3位数字的值,不会考虑第3位之后的小数的  
  83.         System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35  
  84.         System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34  
  85.         System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35  
  86.         System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34  
  87.         //ROUND_HALF_DOWN  
  88.         //如果第3位数字>=5,则做ROUND_UP  
  89.         //如果第3位数字<5,则做ROUND_DOWN  
  90.         System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35  
  91.         System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34  
  92.         System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35  
  93.         System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34  
  94.         //ROUND_HALF_EVEN  
  95.         //如果第3位是偶数,则做ROUND_HALF_DOWN  
  96.         //如果第3位是奇数,则做ROUND_HALF_UP  
  97.         System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35  
  98.         System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35  
  99.     }  
  100. }  


分享到:
评论

相关推荐

    pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

    pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

    matlab建立计算力学课程的笔记和文件.zip

    matlab建立计算力学课程的笔记和文件.zip

    FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

    FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写

    matlab基于RRT和人工势场法混合算法的路径规划.zip

    matlab基于RRT和人工势场法混合算法的路径规划.zip

    matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

    matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

    office 2016三和一精简版

    office 2016三和一精简版

    Scrapy-1.0.2-py2-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡咨询顾问必备宝典-时间管理.ppt

    麦肯锡咨询顾问必备宝典-时间管理.ppt

    setuptools-0.6c10-py2.4.egg

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡顾问的黄金思考方法.pptx

    麦肯锡顾问的黄金思考方法.pptx

    91fdd461elb59a4ce8dfcfc46bc283a7.msi

    91fdd461elb59a4ce8dfcfc46bc283a7.msi

    ansys maxwell

    ansys maxwell

    5-5.py

    5-5

    xx广告促销计划流程实施手册.ppt

    xx广告促销计划流程实施手册.ppt

    仿小米商城微信小程序源码+项目说明.zip

    仿小米商城微信小程序源码+项目说明.zip

    pytest-4.6.0.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Scrapy-2.10.1.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    麦肯锡xx客户满意服务.ppt

    麦肯锡xx客户满意服务.ppt

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    基于python+Scrapy的农业数据爬虫设计与实现

    【作品名称】:基于python+Scrapy的农业数据爬虫设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于Scrapy的农业数据爬虫设计与实现 . ├── Crops # web服务 │ ├── app.py │ ├── static # 静态文件 │ │ ├── css │ │ └── js │ └── templates # 静态页面 │ ├── corn.html │ ├── corns.html │ ├── index.html │ ├── porcor.html │ ├── pork.html │ └── porks.html ├── README.md └── spider # 爬虫及数据处理 ├── integration # 数据汇总 │ └── corn.py └── tutorial # 爬虫 ├── scrap

Global site tag (gtag.js) - Google Analytics