JAVA:货币金额类型、精确小数类型数值的定义BigDecimal和基本运算操作
1.精确小数类型需要用BigDecimal类型
在JAVA中有8种基本数据类型(boolean, byte, short, int, long, float, double, char),其中float和double都是浮点型,但平常我们需要表示货币金额或小数类型的数值时,不能用这两种类型,因为浮点型的精确范围是不适用于日常的精确小数计算。
我们需要使用的类型是java.math.BigDecimal类型。
2.创建对象
使用BigDecimal(String val)的构造方法创建对象
如BigDecimal numA=new BigDecimal("0.6");,
尽量不要用参数为float或double的BigDecimal创建对象,如BigDecimal numA=new BigDecimal(0.6);
因为使用参数为float或double的BigDecimal创建对象会丢失精度,如
BigDecimal bdTest = new BigDecimal(1.745);
BigDecimal bdTest1 = new BigDecimal(0.745);
bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);
bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("bdTest:" + bdTest); // 1.75
System.out.println("bdTest1:" + bdTest1); // 0.74
3.数值计算
BigDecimal 类型不能用 +, -, *, / 来运算,需要用函数,如下:
BigDecimal numA=new BigDecimal("0.6");
BigDecimal numB=new BigDecimal("0.12");
//加法
System.out.println(numA.add(numB));//结果0.72
//减法
System.out.println(numA.subtract(numB));//结果0.48
//乘法
System.out.println(numA.multiply(numB));//结果0.072
//除法
System.out.println(numA.divide(numB));//结果5
注意,如果除法结果不是整数会报错,此时需要获取保留小数,使用函数为:
divide(BigDecimal divisor, int scale, int roundingMode)
divisor是除数,scale是精确度,roundingMode是结果的取值方式(如BigDecimal.ROUND_HALF_UP)。
例如 numA.divide(numB,2,RoundingMode.HALF_UP)
3.比较大小
BigDecimal 类型不能用 >,< 来运算,需要用compareTo函数,返回值表示为0:相等,1:大于,-1:小于
如下:
BigDecimal numA=new BigDecimal("0.6");
BigDecimal numB=new BigDecimal("0.12");
System.out.println(numA.compareTo(numB));//结果为 1
4.四舍五入
最常用的是ROUND_HALF_UP(向上取整) 和ROUND_HALF_DOWN(向下取整)
BigDecimal numA=new BigDecimal("0.625");
BigDecimal numB=new BigDecimal("0.125");
System.out.println(numA.setScale(2,BigDecimal.ROUND_HALF_UP));//结果0.63
System.out.println(numA.setScale(2,BigDecimal.ROUND_HALF_UP));//结果0.12
ROUND_HALF_UP是最常用
5.转为负数
new BigDecimail().negate() 返回负数
6.绝对值
new BigDecimal("-3.1").abs() 返回正数 3.1
JAVA:货币金额类型、精确小数类型数值的定义BigDecimal和基本运算操作相关推荐
- 110-简单类型之整数类型和小数类型
简单类型-整数 简单类型-小数 float myFloat=12.5f; 转载于:https://www.cnblogs.com/wuxiaohui1983/p/9965493.html
- java注解保留两位小数_jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题
一. 问题 最近开发中使用BigDecimal这个数据类型 返回json数据时出现了点问题: # 1.前端第一次保存的时候 穿过来的数据格式 240.00 240.77 # 2. mysql数据库存储 ...
- Java使用正则表达式去掉小数类型字符串多余的.与0
/*** 使用java正则表达式去掉多余的.与0** @param str 小数类型的字符串* @return 去掉小数点或多余的0*/ public static String subZeroAnd ...
- Java中double类型输出小数点后两位
Java中double类型输出小数点后两位 思路 就是在输出的时候使用字符串格式即可. double testNum=1.123456789;System.out.println(String.for ...
- java数据类型之小数类型
小数类型 数据类型 所占字节数 精度 float 4 7 double 8 15 class Demo {public static void main () {//1)小数字字面量默认double类 ...
- java计算人民币整数金额_java 使用BigDecimal进行货币金额计算的操作
float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal. 而且使用BigDecimal类也可以进行大数的操作. 方法 类型 描述 pu ...
- java怎么操作货币,java 使用BigDecimal进行货币金额计算的操作
float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal. 而且使用BigDecimal类也可以进行大数的操作. 方法 类型 描述 pu ...
- java 包装类型_2.Java基本类型与包装类型
java中的基本类型包含以下几个: byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数的,只不过他 ...
- JAVA中的八种基本类型
一.JAVA中的八种基本类型 1.数字类型(6种) ①byte: 占的位数:byte数据类型占八位: 最小值为:-128(-2^7): 最大值为:127(2^7-1): 默认值为:0: 作 ...
最新文章
- css的content属性
- 计算机网络-后退N帧协议习题思考:数据帧长度范围128~512字节,求信道利用率达到最大,帧序列的比特数至少为多少
- 分析Kotlin协程只挂起不恢复会怎样(是否存在协程泄漏),以及挂起的协程存在哪里?
- docker 删除所有容器和镜像的命令
- java继承中构造方法_java之继承中构造方法总结(文字版)
- 怎么删除计算机c盘应用程序,如何删除C盘的垃圾文件!!
- 特征工程——categorical特征 和 continuous特征
- 夺命雷公狗---微信开发39----微信语言识别接口1
- Nagios:企业级系统监控方案
- 通达信公式大全_通达信MACD金叉的选股公式大全
- 动态规划——使用最小花费爬楼梯(Leetcode 746)
- 压缩html页面 seo,WordPress前端html代码压缩优化方法
- git创建仓库,并提交代码(第一次创建并提交)(转)
- NavigationBar的显隐和颜色设置
- 东北大学c语言及程序设计题库,东北大学c语言编程试题及其答案
- AcWing1072. 树的最长路径(树形DP)题解
- 涉及到大小变化,类似QScrollArea判断大小是否显示滚动条
- SQL数据查询语句(一)
- python根据url下载视频_Python爬取某视频并下载
- 破解完全入门篇 第八章--注册码是怎样炼成的
热门文章
- excel单元格斜线_最实用的8个Excel操作技巧,1分钟学会!
- 什么是天气预报 API 接口?如何获取天气预报 API?
- 基于Android的sina微博分享功能
- 小型水果店开业活动,水果店刚开业怎么做活动
- 个人所得税年度应纳税额抵扣-云服务器ECS入门-考试题及答案-申报更正流程
- 如何解决弹出 C:\WINDOWS\system32\Macromed\Flash\Flash32_11_2_202_228.ocx 问题。
- 团建活动随感(r11笔记第9天)
- Win10安装了Office右键没有新建Word,excel,PPT等选项解决方法
- Unity3D网络游戏0.2
- 奈奎斯特采样定理—以二维图像为例