Java 中的浮点数取精度方法
Java 中的浮点数取精度方法
一、内容
一般在Java代码中取一个double类型的浮点数的精度,四舍五入或者直接舍去等的方式,使用了4种方法,推荐使用第一种,我已经封装成工具类了。
二、代码实现
①使用BigDecimal的方法:RoundTool.java(封装为工具类,推荐使用)
package cn.com.cxsw.utils; 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>
*
* @title RoundTool
* @describe
* @author zfc
* @date 2017年10月25日上午11:18:47
*/ 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 } }
②一些简单的方法:DoubleNumberFormat.java
package cn.com.zfc.example; import java.text.DecimalFormat;
import java.text.NumberFormat; /**
* double类型的浮点数取精度(以保留两位小数为例)
*
* @author zfc
*
*/
public class DoubleNumberFormat {
public static void main(String[] args) {
double num = 1234.123534;
// 1、使用String的format()方法
System.out.println(num + " 保留两位小数:" + String.format("%.2f", num)); // 2、使用DecimalFormat的format()方法
DecimalFormat decimalFormat = new DecimalFormat("#.00");
System.out.println(num + " 保留两位小数:" + decimalFormat.format(num)); // 3、使用NumberFormat的format()方法
NumberFormat numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(2);
System.out.println(num + " 保留两位小数:" + numberFormat.format(num));
}
}
Java 中的浮点数取精度方法的更多相关文章
- JAVA中使用浮点数类型计算时,计算精度的问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
- Java中的BigDecimal类精度问题
bigdecimal 能保证精度的原理是:BigDecimal的解决方案就是,不使用二进制,而是使用十进制(BigInteger)+小数点位置(scale)来表示小数,就是把所有的小数变成整数,记录小 ...
- Java中的equals和hashCode方法
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...
- Java中的equals和hashCode方法详解
Java中的equals和hashCode方法详解 转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...
- 转:Java中的equals和hashCode方法详解
转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...
- 关于java中的hashcode和equals方法原理
关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...
- Java中的栈,堆,方法区和常量池
要说Java中的栈,堆,方法区和常量池就要提到HotSpot,HotSpot是Sun JDK 和 Open JDK中所带的虚拟机. (Sun JDK 和 Open JDK除了注释不同,代码实现基本上是 ...
- Java 中extends与implements使用方法
Java 中extends与implements使用方法 标签: javaclassinterfacestring语言c 2011-04-14 14:57 33314人阅读 评论(7) 收藏 举报 分 ...
- Java中各种(类、方法、属性)访问修饰符与修饰符的说明
类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...
随机推荐
- 24、List三个子类的特点
List的三个子类的特点 因为三个类都实现了List接口,所以里面的方法都差不多,那这三个类都有什么特点呢? ArrayList:底层数据结构是数组,查询快,增删慢.线程不安全,效率高. Vector ...
- 在window 8 或windows2012 上用命令行安装framework3.5 方法
找到对应操作系统安装目录的sources文件夹下的sxs文件夹,拷贝到本地电脑,如F:盘 根目录下 CMD(管理员身份)命令: dism.exe /online /enable-feature /fe ...
- 对string 的操作
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
- 使用转义防御XSS
使用转义防御XSS 在输出的时候防御XSS即对用户输入进行转义,XSS的问题本质上还是代码注入,HTML或者javascript的代码注入,即混淆了用户输入的数据和代码.而解决这个问题,就需要根据用户 ...
- 如何更方便的查看Linux内核代码的更新记录【转】
转自:http://blog.csdn.net/lee244868149/article/details/44302819 Linux内核的更新非常的快,如何快速的了解这些更新呢?最一般的办法就是把新 ...
- 用Max导出Unity3D使用的FBX文件流程注解(转载)
http://www.cnblogs.com/wantnon/p/4564522.html 从max导出FBX到Unity,以下环节需要特别注意.1,单位设置 很多人在建模,动画的时候,默认的ma ...
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.* 点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...
- GLOBAL_NAMES参数研究
最近在配置Stream时,发现必须要把GLOBAL_NAMES参数的指设置为TRUE,具体原因为何不知.但是发现在设置了该参数之后,数据库每天的物化视图刷新出现了问题.之后查明原因,是DBLINK出现 ...
- Kubernetes 部署kafka ACL(单机版)
一.概述 在Kafka0.9版本之前,Kafka集群时没有安全机制的.Kafka Client应用可以通过连接Zookeeper地址,例如zk1:2181:zk2:2181,zk3:2181等.来获取 ...
- Linux学习笔记:wc查看文件字节数、字数、行数
Linux系统中的wc(Word Count)命令可以统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据. 语 ...