文档章节

数据类型——BigDecimal

t
 tomorrow_li
发布于 2017/05/27 01:25
字数 376
阅读 2
收藏 0
  1. 常用构造方法
BigDecimal(double val);

BigDecimal(int val);

BigDecimal(long val);

BigDecimal(String val);

注意事项:当构造方法的参数时是double类型时,会出现精度损失问题,如:

public class BigDecimalTest {
    public static void main(String[] args){
        double d = 301353.05;
        BigDecimal decimal = new BigDecimal(d);
        System.out.println(decimal);
        System.out.println(decimal.setScale(1, RoundingMode.HALF_UP));
    }
}

输出结果:

301353.0499999999883584678173065185546875
301353.0

解决方案之一:将对应的double类型数据转换成string类型,如:

public class BigDecimalTest {
    public static void main(String[] args){
        double d = 301353.05;
        System.out.println(new BigDecimal(new Double(d).toString()));
        System.out.println(new BigDecimal("301353.05"));
        System.out.println(new BigDecimal("301353.895898895455898954895989"));
    }
}

输出结果:

301353.05
301353.05
301353.895898895455898954895989

所以,如果需要保证精度,最好是不要使用BigDecimal的double参数的构造函数,因为存在损失double参数精度的可能,最好是使用BigDecimal的String参数的构造函数。

 

2.做加、减、乘、除操作

//加
BigDecimal add(BigDecimal augend);

//减
BigDecimal  subtract(BigDecimal subtrahend) 

//乘
BigDecimal  multiply(BigDecimal multiplicand)

//除
BigDecimal divide(BigDecimal divisor);

BigDecimal divide(BigDecimal divisor, int scale, int roundingMode);用一个BigDecimal对象
除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么

3.设置精度问题

BigDecimal.setScale()方法用于格式化小数点

setScale(1)表示保留一位小数,默认用四舍五入方式 
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

scale(),返回当前BigDecimal的精度

 

© 著作权归作者所有

t
粉丝 0
博文 8
码字总数 15580
作品 0
私信 提问
常用类(三)

Integer Character Arrays BigDecimal/BigInteger Calendar 数组的排序方式及二分折半查找 一、Integer(方法补充) 1、十进制转换其他进制方法 public static String toBinaryString(int i):二...

走了丶
2017/07/28
0
0
BigDecimal的使用

这次在APP开发中我遇到了精确计算问题.比如服务器给我一个百分比,我根据这个比例计算出价格,送到服务器.比如:2100.05 * 0.2计算的结果并不是420.01,而是420.010000000005.在《Java解惑》这本...

SunnyTime
2016/03/23
275
0
Mybatis应用学习(2)——配置文件编写

Mybatis的配置文件SqlMapConfig.xml 1.1 主要标签 properties(定义属性):用来定义一些固定属性值,以key-value形式存在 MyBatis 将按照下面的顺序来加载属性:在 properties 元素体内定义...

江左煤郎
2018/11/24
0
0
mybatis3 配置文件解析

配置文件的基本结构 configuration —— 根元素 environment transactionManager —— 事务管理器 dataSource —— 数据源 properties —— 定义配置外在化 settings —— 一些全局性的配置 ...

北方攻城师
2014/08/02
0
0
java中的四舍五入——几种四舍五入的写法

// 方式一:BigDecimal方式 double f = 3.1315; BigDecimal b = new BigDecimal( new Double(f).toString ); double f1 = b.setScale(3, BigDecimal.ROUNDHALFUP).doubleValue(); 注意:这里......

霜叶情
2018/04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins基础入门-5-用户和权限管理

本篇,我们来介绍下Jenkins上如何创建用户,以及如何管理用户,和那些用户可以有ProjectA的权限。这个很好理解,一个项目,有开发和测试,和运维,每个团队都有不同的角色,例如有测试经理和...

shzwork
16分钟前
1
0
linux上解压版安装jdk,tomcat

需要的安装包 1.vmware12 2.centos7版本 3.安装完成后需要xshell来连接远程虚拟机,虚拟机保证要联网,网络畅通。 4.xftp用来向linux传输文件用,一般来说xshell和xftp配套使用 5.对应的压缩...

architect刘源源
52分钟前
26
0
使用 spring 的 IOC 解决程序耦合

工厂模式解耦 在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时...

骚年锦时
今天
2
0
group by分组后获得每组中时间最大的那条记录

用途: GROUP BY 语句用于 对一个或多个列对结果集进行分组。 例子: 原表: 现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。 我们使用下列 SQL 语句: SELECT ID,US...

豆花饭烧土豆
今天
3
0
android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部