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和基本运算操作相关推荐

  1. 110-简单类型之整数类型和小数类型

    简单类型-整数 简单类型-小数 float myFloat=12.5f; 转载于:https://www.cnblogs.com/wuxiaohui1983/p/9965493.html

  2. java注解保留两位小数_jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题

    一. 问题 最近开发中使用BigDecimal这个数据类型 返回json数据时出现了点问题: # 1.前端第一次保存的时候 穿过来的数据格式 240.00 240.77 # 2. mysql数据库存储 ...

  3. Java使用正则表达式去掉小数类型字符串多余的.与0

    /*** 使用java正则表达式去掉多余的.与0** @param str 小数类型的字符串* @return 去掉小数点或多余的0*/ public static String subZeroAnd ...

  4. Java中double类型输出小数点后两位

    Java中double类型输出小数点后两位 思路 就是在输出的时候使用字符串格式即可. double testNum=1.123456789;System.out.println(String.for ...

  5. java数据类型之小数类型

    小数类型 数据类型 所占字节数 精度 float 4 7 double 8 15 class Demo {public static void main () {//1)小数字字面量默认double类 ...

  6. java计算人民币整数金额_java 使用BigDecimal进行货币金额计算的操作

    float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal. 而且使用BigDecimal类也可以进行大数的操作. 方法 类型 描述 pu ...

  7. java怎么操作货币,java 使用BigDecimal进行货币金额计算的操作

    float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal. 而且使用BigDecimal类也可以进行大数的操作. 方法 类型 描述 pu ...

  8. java 包装类型_2.Java基本类型与包装类型

    java中的基本类型包含以下几个: byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数的,只不过他 ...

  9. JAVA中的八种基本类型

    一.JAVA中的八种基本类型 1.数字类型(6种)   ①byte:     占的位数:byte数据类型占八位: 最小值为:-128(-2^7): 最大值为:127(2^7-1): 默认值为:0: 作 ...

最新文章

  1. css的content属性
  2. 计算机网络-后退N帧协议习题思考:数据帧长度范围128~512字节,求信道利用率达到最大,帧序列的比特数至少为多少
  3. 分析Kotlin协程只挂起不恢复会怎样(是否存在协程泄漏),以及挂起的协程存在哪里?
  4. docker 删除所有容器和镜像的命令
  5. java继承中构造方法_java之继承中构造方法总结(文字版)
  6. 怎么删除计算机c盘应用程序,如何删除C盘的垃圾文件!!
  7. 特征工程——categorical特征 和 continuous特征
  8. 夺命雷公狗---微信开发39----微信语言识别接口1
  9. Nagios:企业级系统监控方案
  10. 通达信公式大全_通达信MACD金叉的选股公式大全
  11. 动态规划——使用最小花费爬楼梯(Leetcode 746)
  12. 压缩html页面 seo,WordPress前端html代码压缩优化方法
  13. git创建仓库,并提交代码(第一次创建并提交)(转)
  14. NavigationBar的显隐和颜色设置
  15. 东北大学c语言及程序设计题库,东北大学c语言编程试题及其答案
  16. AcWing1072. 树的最长路径(树形DP)题解
  17. 涉及到大小变化,类似QScrollArea判断大小是否显示滚动条
  18. SQL数据查询语句(一)
  19. python根据url下载视频_Python爬取某视频并下载
  20. 破解完全入门篇 第八章--注册码是怎样炼成的

热门文章

  1. excel单元格斜线_最实用的8个Excel操作技巧,1分钟学会!
  2. 什么是天气预报 API 接口?如何获取天气预报 API?
  3. 基于Android的sina微博分享功能
  4. 小型水果店开业活动,水果店刚开业怎么做活动
  5. 个人所得税年度应纳税额抵扣-云服务器ECS入门-考试题及答案-申报更正流程
  6. 如何解决弹出 C:\WINDOWS\system32\Macromed\Flash\Flash32_11_2_202_228.ocx 问题。
  7. 团建活动随感(r11笔记第9天)
  8. Win10安装了Office右键没有新建Word,excel,PPT等选项解决方法
  9. Unity3D网络游戏0.2
  10. 奈奎斯特采样定理—以二维图像为例