iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >BigDecimal怎么在Java中使用
  • 820
分享到

BigDecimal怎么在Java中使用

javabigdecimal 2023-05-30 23:05:16 820人浏览 安东尼
摘要

这期内容当中小编将会给大家带来有关BigDecimal怎么在Java中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinI

这期内容当中小编将会给大家带来有关BigDecimal怎么在Java中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算.
其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.

BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDecimal 加入了小数的概念.

float和Double只能用来做科学计算或者是工程计算;在商业计算中,对数字精度要求较高,必须使用 BigInteger 类和 BigDecimal 类,它支持任何精度的定点数,可以用它来精确计算货币值.

BigDecimal类创建的是对象,不能使用传统的+、-、*、/等算术运算符直接对其进行数学运算,而必须调用其对应的方法.方法的参数也必须是BigDecimal类型的对象.

构造 BigDecimal 对象常用以下方法:

BigDecimal BigDecimal(double d); //不允许使用
BigDecimal BigDecimal(String s); //常用,推荐使用
static BigDecimal valueOf(double d); //常用,推荐使用

其中,

double 参数的构造方法,不允许使用!!!!因为它不能精确的得到相应的值;
2. String 构造方法是完全可预知的: 写入 new BigDecimal("0.1") 将创建一个 BigDecimal,它正好等于预期的0.1; 因此,通常建议优先使用 String 构造方法;
3. 静态方法 valueOf(double val) 内部实现,仍是将 double 类型转为 String 类型; 这通常是将 double(或float)转化为 BigDecimal 的首选方法;

测试代码如下:

public static void main(String[] args) {double d1 = 0.10334;double d2 = 1234.0;System.out.println("new BigDecimal("+d1+")=" + new BigDecimal(d1)); //此种方式绝对不允许!!!!!System.out.println("new BigDecimal("+d2+")=" + new BigDecimal(d2)); //此种方式绝对不允许!!!!!System.out.println("");System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(String.valueOf(d1)));System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(String.valueOf(d2)));System.out.println("");System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(Double.toString(d1)));System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(Double.toString(d2)));System.out.println("");System.out.println("BigDecimal.valueOf("+d1+")=" + BigDecimal.valueOf(d1));System.out.println("BigDecimal.valueOf("+d2+")=" + BigDecimal.valueOf(d2));System.out.println("");BigDecimal b1 = BigDecimal.valueOf(1);BigDecimal b2 = BigDecimal.valueOf(1.00000);System.out.println(b1.equals(b2));System.out.println(b1.compareTo(b2));}

输出如下:

new BigDecimal(0.10334)=0.10334000000000000130118138486068346537649631500244140625new BigDecimal(1234.0)=1234new BigDecimal(String.valueOf(0.10334))=0.10334new BigDecimal(String.valueOf(1234.0))=1234.0new BigDecimal(String.valueOf(0.10334))=0.10334new BigDecimal(String.valueOf(1234.0))=1234.0BigDecimal.valueOf(0.10334)=0.10334BigDecimal.valueOf(1234.0)=1234.0false0

附1, BigDecimal 类的 valueOf()方法源码

public static BigDecimal valueOf(double val) {   return new BigDecimal(Double.toString(val)); }

附2, BigDecimal类的几个常用方法

BigDecimal remainder(BigDecimal divisor);BigDecimal negate();int compareTo(BigDecimal val);

附3, 提供精确的浮点数运算(包括加、减、乘、除、四舍五入)的工具类源码

package com.util;import java.math.BigDecimal;public class ArithUtil {// 除法运算默认精度private static final int DEF_DIV_SCALE = 10;private ArithUtil() {}public static double add(double value1, double value2) {BigDecimal b1 = BigDecimal.valueOf(value1);BigDecimal b2 = BigDecimal.valueOf(value2);return b1.add(b2).doubleValue();}public static double sub(double value1, double value2) {BigDecimal b1 = BigDecimal.valueOf(value1);BigDecimal b2 = BigDecimal.valueOf(value2);return b1.subtract(b2).doubleValue();}public static double mul(double value1, double value2) {BigDecimal b1 = BigDecimal.valueOf(value1);BigDecimal b2 = BigDecimal.valueOf(value2);return b1.multiply(b2).doubleValue();}public static double div(double value1, double value2) throws IllegalAccessException {return div(value1, value2, DEF_DIV_SCALE);}public static double div(double value1, double value2, int scale) throws IllegalAccessException {if(scale < 0) {throw new IllegalAccessException("精确度不能小于0");}BigDecimal b1 = BigDecimal.valueOf(value1);BigDecimal b2 = BigDecimal.valueOf(value2);// return b1.divide(b2, scale).doubleValue();return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();}public static double round(double v, int scale) throws IllegalAccessException {return div(v, 1, scale);}public static boolean equalTo(BigDecimal b1, BigDecimal b2) {if(b1 == null || b2 == null) {return false;}return 0 == b1.compareTo(b2);}}

下面,总结下这次项目中BigDecimal的用法。

加减乘除
2.设置精度
3.取反

加减乘除分别调用函数

public BigDecimal add(BigDecimal value); public BigDecimal subtract(BigDecimal value); public BigDecimal multiply(BigDecimal value); public BigDecimal divide(BigDecimal value);

举例:

BigDecimal a=new BigDecimal(10.0); BigDecimal b=new BigDecimal(9.1); System.out.println(a.subtract(b));

精度设置,为什么会设置精度,给大家看个效果

代码如下

BigDecimal abig=new BigDecimal(10.0); BigDecimal bbig=new BigDecimal(9.1); BigDecimal cbig=new BigDecimal(8.9);  System.out.println(abig.subtract(bbig)); System.out.println(abig.subtract(cbig));

结果如下:

0.9000000000000003552713678800500929355621337890625 1.0999999999999996447286321199499070644378662109375

并不是我们希望看到的0.9和1.1,原因就是转成二进制的时候会有精度问题,导致这样的结果。所以我们可以在运算的时候加精度,也可以在实例化BigDecimal的时候用字符串

设置精度的方法:

System.out.println(abig.subtract(bbig).setScale(2, BigDecimal.ROUND_HALF_UP)); System.out.println(abig.subtract(cbig).setScale(2, BigDecimal.ROUND_HALF_UP));

这样设置两位精度就可以啦

0.90 1.10

字符串实例化的方法:

BigDecimal abig=new BigDecimal("10.0"); BigDecimal bbig=new BigDecimal("9.1"); BigDecimal cbig=new BigDecimal("8.9");

取反

因为Bigdecimal是无法直接用+-*/这些符号进行计算的,所以取反的时候也需要一个单独的方法来实现:

System.out.println(abig.negate());

这样就会拿到它的相反数了:

-10.0

上述就是小编为大家分享的BigDecimal怎么在Java中使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: BigDecimal怎么在Java中使用

本文链接: https://www.lsjlt.com/news/221877.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • BigDecimal怎么在Java中使用
    这期内容当中小编将会给大家带来有关BigDecimal怎么在Java中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinI...
    99+
    2023-05-30
    java bigdecimal
  • BigDecimal和double怎么在Java中使用
    本篇文章为大家展示了 BigDecimal和double怎么在Java中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。BigDecimal类对于不需要任何准确计算精度的数字可以直接使用float...
    99+
    2023-05-30
    java double bigdecimal
  • 怎么使用Java中的BigDecimal
    这篇文章主要介绍“怎么使用Java中的BigDecimal”,在日常操作中,相信很多人在怎么使用Java中的BigDecimal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java中的BigDeci...
    99+
    2023-06-16
  • 怎么在java中使用BigDecimal解决异常
    本篇文章为大家展示了怎么在java中使用BigDecimal解决异常,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程...
    99+
    2023-06-14
  • java中BigDecimal怎么用
    这篇文章主要为大家展示了“java中BigDecimal怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中BigDecimal怎么用”这篇文章吧。【为什么要用BigDecimal?】...
    99+
    2023-06-25
  • java中的BigDecimal使用
    文章目录 1、什么是BigDecimal?2、为什么使用BigDecimal?3、如何使用BigDecimal?(1)BigDecimal初始化赋值(2)加减乘除运算(3)BigDecimal保留两位小数及舍入模式(4)BigDec...
    99+
    2023-08-25
    java 开发语言 算法
  • Java中BigDecimal的舍入模式怎么使用
    这篇文章主要讲解了“Java中BigDecimal的舍入模式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中BigDecimal的舍入模式怎么使用”吧!BigDecimal的...
    99+
    2023-07-02
  • java中BigDecimal的使用方法
    小编给大家分享一下java中BigDecimal的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、BigDecimal使用scale()表示小数位数。&...
    99+
    2023-06-15
  • java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题
    文章目录 一、BigDecimal概述二、BigDecimal常用构造方法三、BigDecimal常用方法四、BigDecimal进阶BigDecimal的八种舍入模式BigDecimal格式化、小数点转换货币格式化与百分比格式化 ...
    99+
    2023-08-18
    java BigDecimal BigDecimal的使用及坑
  • Java中使用BigDecimal要注意什么
    这篇文章主要介绍“Java中使用BigDecimal要注意什么”,在日常操作中,相信很多人在Java中使用BigDecimal要注意什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中使用BigDec...
    99+
    2023-07-05
  • Java BigDecimal类怎么用
    这篇文章主要介绍了Java BigDecimal类怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、简介Java在java.math包中提供的API类BigD...
    99+
    2023-06-25
  • Java的BigDecimal类怎么用
    这篇文章主要介绍“Java的BigDecimal类怎么用”,在日常操作中,相信很多人在Java的BigDecimal类怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的BigDecimal类怎么用...
    99+
    2023-06-17
  • java中BigDecimal的介绍及使用
    BigDecimal是Java中的一个类,用于表示任意精度的十进制数。它提供了精确的数值计算,避免了浮点数计算时的精度损失。使用Bi...
    99+
    2023-09-09
    java
  • Java精确计算BigDecimal类怎么使用
    本篇内容主要讲解“Java精确计算BigDecimal类怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java精确计算BigDecimal类怎么使用”吧!引言float和double类型...
    99+
    2023-06-25
  • 使用java怎么对BigDecimal进行格式化
    使用java怎么对BigDecimal进行格式化?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合...
    99+
    2023-06-14
  • Java BigDecimal类的一般使用、BigDecimal转double方式
    目录BigDecimal类的一般使用、BigDecimal转doubleBigDecimal大据类BigDecimal类创建一个BigDecimal对象方法声明BigDecimal转...
    99+
    2024-04-02
  • 深入浅析BigDecimal在Java中的作用
    本篇文章给大家分享的是有关深入浅析BigDecimal在Java中的作用 ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.引言    ...
    99+
    2023-05-31
    java bigdecimal
  • java中double转bigdecimal怎么实现
    在Java中,可以使用BigDecimal类的valueOf方法将double类型转换为BigDecimal类型。以下是一个示例代码...
    99+
    2024-04-02
  • java中BigDecimal的作用是什么
    java中BigDecimal的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类...
    99+
    2023-06-14
  • 注意Java中 new BigDecimal(double val) 的使用
    目录问题解决总结前言: 今天下午跑单元测试报错,发现一个关于 new BigDecimal(double val) 的代码问题,总结下。 问题 业务代码: public stati...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作