在平常开发中,如果涉及到计算,要求准确的精度,比如单价*数量=总价之类的计算,那么得用到BigDecimal。

初始化

如下:

BigDecimal amount=new BigDecimal("5.33");

注意,最好不要用double类型来初始化,数值并不准确。

比如

BigDecimal amount=new BigDecimal(0.06);

那么有可能这个BigDecimal会从0.06变成0.059999999,传入double类型来初始化本身就是不精确的。

四舍五入,保留位数

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则向下舍

加减乘除、绝对值

加法 add()函数 减法subtract()函数

乘法 multipy()函数 除法divide()函数 绝对值abs()函数

重点注意除法,详细参数为

pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

其中divisor为除数,scale为小数点位数, roundingMode表示是否四舍五入。

示例如下:

import java.math.BigDecimal;

public class BigDecimalDivideTest {
public static void main(String[] args) {
BigDecimal bigDecimal1=new BigDecimal(230.08);
BigDecimal bigDecimal2=new BigDecimal(20);
//除法,保留两位,四舍五入
BigDecimal bigDecimal3=bigDecimal1.divide(bigDecimal2,2,BigDecimal.ROUND_HALF_UP);
System.out.println(bigDecimal3);
}
}

常用的数值

常用的常量有BigDecimal.ZERO表示零。

比较大小

注意,比较BigDecimal大小,不要用equals()比较。

比较大小,可以用compareTo()函数。

对于BigDecimal变量a和b,进行a.compareTo(b)的返回结果,

如果返回1,表示a>b;

如果返回0,表示a=b;

如果返回-1,表示a<b。

import java.math.BigDecimal;

public class BigDecimalTest {
public static void main(String[] args) {
BigDecimal detailAmount=new BigDecimal(-11);
BigDecimal positiveDetailAmount=new BigDecimal(11);
int result=BigDecimal.ZERO.compareTo(detailAmount);
int result2=BigDecimal.ZERO.compareTo(positiveDetailAmount);
System.out.println(result);
System.out.println(result2);
}
}

参考资料:

https://blog.csdn.net/haiyinshushe/article/details/82721234

BigDecimal代码示例的更多相关文章

  1. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  2. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

  3. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

  4. SELECT控件操作的JS代码示例

    SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...

  5. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  6. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  7. C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

    DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

  8. C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例

    Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...

  9. 领域驱动开发推荐代码示例 — Microsoft NLayerApp

    简介: Microsoft NLayerApp是由微软西班牙团队出品的基于.NET 4.0的“面向领域N层分布式架构”代码示例,在codeplex上的地址是:http://microsoftnlaye ...

随机推荐

  1. 简单了解Eureka

    1.Eureka简介 Eureka是Spring Cloud Netflix微服务套件中的一部分,是一套成熟的服务注册和发现组件,可以与Springboot构建的微服务很容易的整合起来. Eureka ...

  2. python基础04day

    一 引子 数据类型 用途 定义方式 是否多项 有/无序 可/不可变 对应状态 数字     否 —— 不可   字符串    “”‘’“““””” 否 有 不可   列表    [] 是 有 可  同 ...

  3. 31、splice()用法

    改变数组,向数组中添加/删除元素: eg: 1.删除元素: let arr=['bob','lily','bike','sam']; arr.splice(2,1) console.log(arr) ...

  4. jvm学习笔记之class文件的加载、初始化

    编写的java文件在要真正运行时,会首先被编译成 “.class"结尾的二进制文件,然后被虚拟机加载.那么在虚拟机中一个class文件要成为java实例,需要经历好几个步骤: 1.装载:装载 ...

  5. byte[],File和InputStream的相互转换

    File.FileInputStream 转换为byte[] File file = new File("test.txt"); InputStream input = new F ...

  6. Sql Server设置用户只能查看并访问特定数据库

    现需要限定特定的用户只能查看并访问特定的数据库,防止多个用户对数据库操作时一些误操作. 参考i6first的如何让用户只能访问特定的数据库(MSSQL)博文 1.新建登录用户 以管理员身份登陆数据库( ...

  7. Laravel实现用户的注册、登录

    一.安装 Laravel(使用 Laravel5.5) 通过 Composer 创建项目 composer create-project --prefer-dist laravel/laravel s ...

  8. pt-online-schema-change 最佳实践(转)

    pt的详细步骤 Step 1: Create the new table. Step 2: Alter the new, empty table. This should be very quick, ...

  9. 随笔记录--Array类型

    前言:除了Object类型之外,Array类型恐怕是ECMAScript中最常用的类型了.而且,ECMAScript中数组与其他多数语言中的数组有很大差别,ECMAScript数组中的每一项可以保存任 ...

  10. HDU2883 kebab(最大流判断满流 + 离散化 + 区间化点)

    [题意]: 有一个烤箱,烤箱在一个时刻最多考M个肉串,N个顾客,每个顾客有属性s,n,e,t s是来的时间,n是想要的肉串数量,e是最晚离开的时间,t是烤的时间(几分熟). 顾客的烤肉可以分开烤,比如 ...