Java BigDecimal基础用法详解

Java BigDecimal基础用法详解

什么是BigDecimal

Java中的float和double类型是不能精确表示十进制数的,这对于很多需要精确计算的场景是不适用的。而BigDecimal是Java提供的一个可以精确表示任意大小和精度的十进制数类。

常用构造方法

  • BigDecimal(double val):通过一个Double类型的值来构造BigDecimal对象。由于double不能表示精确的十进制数,并且在转换过程中可能存在精度损失,因此可能会出现不完全精确的结果。

  • BigDecimal(String val):通过一个String类型的值来构造BigDecimal对象。String类型的表示方式可以精确地描述十进制数,因此可以获得完全精确的结果。

示例代码:

BigDecimal bd1 = new BigDecimal(2.01);
System.out.println(bd1); // 输出结果为2.010000000000000000708874089455323329925537109375

BigDecimal bd2 = new BigDecimal("2.01");
System.out.println(bd2); // 输出结果为2.01

常用操作方法

  • add(BigDecimal augend):将当前对象与augend相加。

  • subtract(BigDecimal subtrahend):将当前对象减去subtrahend。

  • multiply(BigDecimal multiplicand):将当前对象乘以multiplicand。

  • divide(BigDecimal divisor):将当前对象除以divisor。

  • compareTo(BigDecimal val):比较当前对象与val的大小。

示例代码:

BigDecimal bd1 = new BigDecimal("2.01");
BigDecimal bd2 = new BigDecimal("3.02");
BigDecimal bd3 = bd1.add(bd2);
System.out.println("2.01 + 3.02 = " + bd3); // 输出结果为5.03

BigDecimal bd4 = bd2.subtract(bd1);
System.out.println("3.02 - 2.01 = " + bd4); // 输出结果为1.01

BigDecimal bd5 = bd1.multiply(bd2);
System.out.println("2.01 * 3.02 = " + bd5); // 输出结果为6.0902

BigDecimal bd6 = bd2.divide(bd1);
System.out.println("3.02 / 2.01 = " + bd6); // 输出结果为1.5024875621890547

int result = bd1.compareTo(bd2);
if (result < 0) {
    System.out.println("2.01 < 3.02");
} else if (result > 0) {
    System.out.println("2.01 > 3.02");
} else {
    System.out.println("2.01 = 3.02");
}

常用取整方法

  • setScale(int newScale, int roundingMode):将当前对象的小数位数设置为newScale。

  • intValue():将当前对象转换成int类型的值,并截断小数部分。

  • longValue():将当前对象转换成long类型的值,并截断小数部分。

  • doubleValue():将当前对象转换成double类型的值,可能会存在精度损失。

  • toPlainString():将当前对象转换成String类型的值,精度完整。

示例代码:

BigDecimal bd1 = new BigDecimal("3.1415926");
BigDecimal bd2 = bd1.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("3.1415926取两位小数后为:" + bd2); // 输出结果为3.14

System.out.println(bd2.intValue()); // 输出结果为3
System.out.println(bd2.longValue()); // 输出结果为3
System.out.println(bd2.doubleValue()); // 输出结果为3.14
System.out.println(bd2.toPlainString()); // 输出结果为3.14

总结

在进行数值计算时,如果数据要求精度比较高,不能使用float、double类型,可以选择使用BigDecimal类型进行处理。我们可以通过BigDecimal对象提供的一系列方法,实现数值计算、比较、取整等功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java BigDecimal基础用法详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 详细分析JAVA加解密算法

    详细分析JAVA加解密算法 在JAVA中,常用的加解密算法包括对称加密算法、非对称加密算法和HASH算法。在这里,我们将详细分析这些加解密算法的实现过程以及相关代码示例。 对称加密算法 对称加密算法使用同一个密钥进行加密和解密。其加密过程简单、高效,但密钥的共享是该算法的重要瓶颈。 在JAVA中,常用的对称加密算法包括DES、3DES、AES和Blowfis…

    Java 2023年5月19日
    00
  • 浅谈JSP serverlet的区别与联系

    浅谈JSP和Servlet的区别与联系 JSP(Java Server Pages)和Servlet是Java Web开发中常见的两种技术。JSP是一种动态网页开发技术,它允许在HTML网页中嵌入Java代码,从而实现页面数据的动态生成和交互性的实现。而Servlet则是Java Web应用程序的一个组成部分,是运行在Web服务器上的Java程序,它可以在W…

    Java 2023年6月15日
    00
  • 微信小程序使用GoEasy实现websocket实时通讯

    下面是详细讲解“微信小程序使用GoEasy实现websocket实时通讯”的完整攻略。 准备工作 注册GoEasy账号,获取Appkey和Appsecret。 在微信小程序开发者工具中创建一个新项目。 引入GoEasy SDK 在微信小程序的app.js中引入GoEasy SDK。 const goEasy = require(‘./utils/goeasy…

    Java 2023年5月23日
    00
  • day01-项目介绍&功能实现

    项目介绍&功能实现 1.项目介绍&环境搭建 一个以社交平台为核心的轻电商项目,功能如下: 短信登录、商户查询缓存、优惠券秒杀、达人探店、好友关注、附近的商户、用户签到、UV统计 1.1项目架构 1.2项目环境搭建 1.2.1后端项目搭建 mysql的版本采用5.7及以上版本 (1)首先创建数据库,需要创建的表有: tb_user:用户表 tb…

    Java 2023年4月19日
    00
  • 访问JSP文件或者Servlet文件时提示下载的解决方法

    当我们访问JSP文件或者Servlet文件时,有时会出现弹出下载文件的情况,而不是正常的页面展示。这一问题可能是由于Web服务器配置的问题所致。下面提供一些可能的解决方案。 1. 修改web.xml配置 我们可以在web.xml文件中添加以下配置,这会告诉Web服务器以HTML格式返回JSP和Servlet页面: <mime-mapping> &…

    Java 2023年6月15日
    00
  • Spring Boot中的max-http-header-size配置方式

    下面就是Spring Boot中的max-http-header-size配置方式的详细攻略: 简介 HTTP协议是应用最为广泛的协议之一,但是其在协议设计过程中为了兼容性以及其他原因,比如防止DDOS攻击,针对header大小做了一些限制。默认情况下,tomcat最大可以处理的header大小为8k(8192),如果要处理更大的header,需要进行相关的…

    Java 2023年6月2日
    00
  • Spring Boot security 默认拦截静态资源的解决方法

    Spring Boot Security是Spring Boot框架中的权限管理模块,它提供了基于角色的访问控制和用户认证等功能。但是在使用过程中,往往会出现Spring Boot Security默认拦截静态资源的问题。本文将详细讲解如何解决这个问题。 问题原因 Spring Boot Security默认会对所有请求进行拦截和处理,包括静态资源。而默认的…

    Java 2023年5月20日
    00
  • SpringBoot集成WebSocket实现前后端消息互传的方法

    下面是 SpringBoot 集成 WebSocket 实现前后端消息互传的完整攻略。 简介 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得浏览器和服务器之间的实时通信变得更加容易。Spring Boot 提供了一个强大的 WebSocket 模块,可以轻松实现 WebSocket 的集…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部