Java - BigDecimal 的使用
2021/8/23 17:05:52
本文主要是介绍Java - BigDecimal 的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 前言
- 具体应用
- 构造器
- 加减乘除运算
- 比较大小
- divide方法注意问题
- RoundingMode 小数保留模式
前言
记录BigDecimal的一些应用,BigDecimal对超过16位有效位的数提供了精确的运算支持。
具体应用
构造器
BigDecimal num1 = new BigDecimal("5"); // String 推荐使用 BigDecimal num2 = new BigDecimal(5); // int BigDecimal num3 = new BigDecimal(2147483648L); // Long BigDecimal num4 = new BigDecimal(new Double("12.12")); // Double 不推荐使用,精度丢失 System.out.println(num1); // 5 System.out.println(num2); // 5 System.out.println(num3); // 2147483648 System.out.println(num4); // 12.1199999999999992184029906638897955417633056640625
加减乘除运算
BigDecimal num1 = new BigDecimal("5"); BigDecimal num2 = new BigDecimal("2"); // 加法 System.out.println(num1.add(num2)); // 7 // 减法 System.out.println(num1.subtract(num2)); // 3 // 乘法 System.out.println(num1.multiply(num2)); // 10 // 除法 System.out.println(num1.divide(num2)); // 2.5
比较大小
- BigDimical 的大小比较使用用 compareTo 方法
/** * 大小比较 * compare = -1,表示num1小于num2; * compare = 0,表示num1等于num2; * compare = 1,表示num1大于num2; */ int compare = num1.compareTo(num2); System.out.println(compare); // 1
divide方法注意问题
- BigDecimal 做除法的时候注意出现无限循环
BigDecimal num1 = new BigDecimal("1"); BigDecimal num2 = new BigDecimal("3"); System.out.println(num1.divide(num2)); // 0.333333333333
- 运行异常
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
- 解决方法:指定保留的小数的位数
System.out.println(num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP));
- 语法:divide(BigDecimal,保留小数点后几位小数,小数保留模式)
RoundingMode 小数保留模式
保留模式 | 说明 |
---|---|
ROUND_CEILING | 向正无穷方向舍入 |
ROUND_FLOOR | 向负无穷方向舍入 |
ROUND_HALF_UP | 四舍五入 |
ROUND_HALF_DOWN | 五舍六入 |
ROUND_HALF_EVEN | 银行家算法,四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一 |
ROUND_UNNECESSARY | 无需舍位 |
ROUND_UP | 向远离零的方向舍入 |
ROUND_DOWN | 向零方向舍入 |
这篇关于Java - BigDecimal 的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27本地多文件上传的简单教程
- 2024-11-27低代码开发:初学者的简单教程
- 2024-11-27如何轻松掌握拖动排序功能
- 2024-11-27JWT入门教程:从零开始理解与实现
- 2024-11-27安能物流 All in TiDB 背后的故事与成果
- 2024-11-27低代码开发入门教程:轻松上手指南
- 2024-11-27如何轻松入门低代码应用开发
- 2024-11-27ESLint开发入门教程:从零开始使用ESLint
- 2024-11-27Npm 发布和配置入门指南
- 2024-11-27低代码应用课程:新手入门指南