一、简介
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

二、构造器描述
BigDecimal(int)       创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long)    创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

三、方法描述
add(BigDecimal)        BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal)  BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal)     BigDecimal对象中的值相除,然后返回这个对象。
toString()                将BigDecimal对象的数值转换成字符串。
doubleValue()          将BigDecimal对象中的值以双精度数返回。
floatValue()             将BigDecimal对象中的值以单精度数返回。
longValue()             将BigDecimal对象中的值以长整数返回。
intValue()               将BigDecimal对象中的值以整数返回。

四、格式化及例子
由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。

以利用BigDecimal对货币和百分比格式化为例。首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。

    public static void main(String[] args) {NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用percent.setMaximumFractionDigits(3); //百分比小数点最多3位BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额BigDecimal interestRate = new BigDecimal("0.008"); //利率BigDecimal interest = loanAmount.multiply(interestRate); //相乘System.out.println("贷款金额:\t" + currency.format(loanAmount));System.out.println("利率:\t" + percent.format(interestRate));System.out.println("利息:\t" + currency.format(interest));}

运行结果如下:

五、BigDecimal比较
BigDecimal是通过使用compareTo(BigDecimal)来比较的,具体比较情况如下:

    public static void main(String[] args) {BigDecimal a = new BigDecimal("1");BigDecimal b = new BigDecimal("2");BigDecimal c = new BigDecimal("1");int result1 = a.compareTo(b);int result2 = a.compareTo(c);int result3 = b.compareTo(a);System.out.println("a<b:"+result1);System.out.println("a=c:"+result2);System.out.println("b>a:"+result3);}

打印结果如下: (-1、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1)

注意不能使用equals方法来比较大小。

使用BigDecimal的坏处是性能比double和float差,在处理庞大,复杂的运算时尤为明显,因根据实际需求决定使用哪种类型。

参考:BigDecimal用法详解 - Ruthless - 博客园

BigDecimal用法介绍相关推荐

  1. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  2. BigDecimal用法详解

    BigDecimal用法详解 一.BigDecimal介绍 用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处 ...

  3. awk 和sed的用法介绍

    awk 和sed的用法介绍 一.awk的介绍 1. 作用及用法要求 2. 使用方法 (1)使用的命令: (2)举例说明: 二.sed的介绍 1. 用法介绍及常用命令 2. 具体使用 一.awk的介绍 ...

  4. Scanpy(一)AnnData数据结构与一些API用法介绍

    目录 Scanpy简介与安装 AnnData AnnData的结构 h5ad:AnnData的写入和读取 Scanpy中一些常用api的用法介绍 sc.pp.filter_cells sc.pp.fi ...

  5. php中使用mysql的视图_MYSQL中视图的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于MYSQL中视图的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.什么是视图 执行一条SQL,将结果集保存在一张虚拟表中 (相关 ...

  6. pm2常用的命令用法介绍

    pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...

  7. predicate java_java8中predicate的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于java8中predicate的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 传递代码 我们首先看一个例子,假设你有一个 Appl ...

  8. c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  9. CompletableFuture API用法介绍(二)

    文章目录 一.纯消费 API 1.thenAccep 2.thenAcceptBoth 3.runAfterBoth 4.thenRun(Runnable action) 二.组合API 1.then ...

最新文章

  1. XMT.com超200万被区块链终端交易
  2. 分治——最近点对问题 hdu1007
  3. Linux如何实现镜像端口
  4. Effect Java 学习笔记-对象的创建与销毁
  5. c程序封装linux,Linux系统使用C语言封装线程读写锁
  6. redis 计数器 java_Redis 实践汇总和使用建议。
  7. U-Boot启动过程完全分析
  8. tomcat中设置Java 客户端程序的http(https)访问代理
  9. 苹果全新10.2英寸iPad再爆实锤 或造成史上最乱的iPad产品线
  10. linux查看native进程,Android 分析应用程序占用native内存
  11. RColorBrewer | R语言中的配色方法汇总(Ⅰ)
  12. MYSQL支持事务吗?
  13. 2108. 找出数组中的第一个回文字符串
  14. java 中时间的比较 用compareTo方法
  15. 给大家讲解一下 AIDL原理分析
  16. 互联网日报 | 5月26日 星期三 | 华为鸿蒙操作系统6月2日发布;特斯拉已在中国建立数据中心;百度发起“高考+”计划...
  17. Python课第3周:平方根格式化
  18. 【UE4】WebUI插件实现HTML透明区域事件穿透响应
  19. uni-app开发app之一uni-app优缺点
  20. EKL日志平台架构概括

热门文章

  1. 基于表征(Representation)的文本匹配、信息检索、向量召回的方法总结
  2. 腾讯 WXG | 技术研究-NLP算法三面复盘
  3. js已知文件路径得到file对象_NodeJs 的几种文件路径
  4. input不管用 vue_重读 VUE 官方文档 lt;2gt;
  5. 7-37 抓老鼠啊~亏了还是赚了? (20 分)
  6. JavaScript学习之Object(下)this
  7. 当代计算机技术在建筑设备中的应用,计算机技术在建筑设计中应用浅谈.doc
  8. c语言 单词变复数_关于C语言中的Complex(复数类型)和imaginary(虚数类型)
  9. .net前台ajax,asp.net利用Ajax和Jquery在前台向后台传参数并返回值
  10. js 清除html页面,如何清除使用JavaScript输入的HTML文件?