当前位置:首页 > Java技术 > BigDecimal的使用 将任意类型转化为BigDecimal

BigDecimal的使用 将任意类型转化为BigDecimal

2022年08月06日 15:09:25Java技术6

float和double类型的主要设计目标是为了科学计算和工程计算。

但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。

一、在比较数值大小时候 将类型转化为bigdecimal

       a、将double类型转化为bigdecimal

Double a=1.23;或者 double a = 1.23
BigDecimal c = BigDecimal.valueOf(a);

其实是先将a转换为string类型 调用a.toString 然后调用 构造方法 也就是 BigDecimal c = new BigDecimal(a.toString)  

不能使用

BigDecimal decimal= new BigDecimal(1.23);

  这样输出的结果不可预料

b、将String转化为BigDecimal

String a= "1.23";
BigDecimal b = new BigDecimal(a)

c、将long转化为BigDecimal

long a= 333l;
BigDecimal b = BigDecimal.valueOf(a);

d、将int类型转化为BigDecimal

int a = 123;
BigDecimal b = BigDecimal.valueOf(a);

总结:将任意类型转化为BigDecimal

先转化为String 然后调用构造方法 new BigDecimal(String val)

//可以将String double long Integer转化为BigDecimal  其他类型可以扩展 
public static BigDecimal geBigDecimal1(Object value){
        if (value == null){
            return null;
        }

        if (value instanceof String || value instanceof Long || value instanceof Integer || value instanceof Double){
            return new BigDecimal(ObjectUtils.toString(value));
        }
        return null;
    }

转化成BigDecimal后可以进行加减乘除的计算

public BigDecimal add(BigDecimal value);                        //加法

public BigDecimal subtract(BigDecimal value);                   //减法 

public BigDecimal multiply(BigDecimal value);                   //乘法

public BigDecimal divide(BigDecimal value);                     //除法
public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal("4.5");
        BigDecimal b = new BigDecimal("1.5");

        System.out.println("a + b =" + a.add(b));
        System.out.println("a - b =" + a.subtract(b));
        System.out.println("a * b =" + a.multiply(b));
        System.out.println("a / b =" + a.divide(b));
    }

 

转化成BigDecimal后可以指定小数个数 以及四舍五入等舍入方式


/*由数字字符串构造BigDecimal的方法 
*设置BigDecimal的小数位数的方法 
*/ 
import java.math.BigDecimal; 
//数字字符串 
String StrBd="1048576.1024"; 
//构造以字符串内容为值的BigDecimal类型的变量bd 
BigDecimal bd=new BigDecimal(StrBd); 
//设置小数位数,第一个变量是小数位数,第二个变量是取舍方法(四舍五入) 
bd=bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
//转化为字符串输出 

转化为BigDecimal后 数据进行比较大小  使用a.compareto(b)方法

BigDecimal a = new BigDecimal("23")
BigDecimal a = new BigDecimal("23.33")
//返回值 1 表示 a>b     -1表示a<b   0表示 a = b
int res = a.compareTo(b);

比较时候不忽略精度时候使用 equals

//输出false
System.out.println(new BigDecimal("1.2").equals(new BigDecimal("1.20")));  

//输出true
System.out.println(new BigDecimal("1.2").compareTo(new BigDecimal("1.20")) == 0); 

结论:对于BigDecimal的大小比较,用equals方法的话会不仅会比较值的大小,还会比较两个对象的精确度,而compareTo方法则不会比较精确度,只比较数值的大小。

作者:82年的哇哈哈
来源链接:https://blog.csdn.net/weixin_42201566/article/details/81914717

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/18371.html

标签: BigDecimal
分享给朋友:

“BigDecimal的使用 将任意类型转化为BigDecimal” 的相关文章

Java 使用BigDecimal进行高精度加减乘除

有时候我们计算金钱或者其他一些计算的时候需要高精度的计算加减乘除,可以使用BigDecimal 加: BigDecimal num1 = new BigDecimal("100.569"); BigDecimal num2 = new Big...

[转]BigDecimal使用(整理)

原文地址:https://www.jianshu.com/p/2947868d76eb 应用场景 大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:货币 使用 1、构建BigDecima...

Java:利用BigDecimal类巧妙处理Double类型精度丢失

Java:利用BigDecimal类巧妙处理Double类型精度丢失

文章目录 本篇要点 经典问题:浮点数精度丢失 十进制整数如何转化为二进制整数? 十进制小数如何转化为二进制数?...

Java BigDecimal

1构造函数(主要测试参数类型为double和String的两个常用构造函数)        BigDecimal aDouble =new BigDecimal(1.22);  &nb...

BigDecimal 使用compareTo比较大小

1.BigDecimal的比较模式  BigDecimal b1 = new BigDecimal(0.1); BigDecimal b2 = new BigDecimal(0.2); int c = b1.compareTo(b2); // -1 c=1表示...

【java提高】(19)---BigDecimal详解和精度问题

【java提高】(19)---BigDecimal详解和精度问题

BigDecimal详解和精度问题 一、背景 在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal,例如价格、质量。 为什么这么说,主要有两点...

BigDecimal去除小数位

String cellValue = ""; double numericCellValue = cell.getNumericCellValue(); BigDecimal bd2...

BigDecimal 百分比转换

public static void main(String[] args) { BigDecimal bigDecimalCount = BigDecimal.valueOf(1); BigDecimal bigDecimalTotal...

BigDecimal常被忽略的问题

BigDecimal常被忽略的问题

  一:相除精度丢失的问题   BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题:   问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333......除不尽,这里不能让电脑一直除不尽,所以BigD...

Java BigDecimal 的舍入模式(RoundingMode)详解

  BigDecimal 有 8 种 RoundingMode(舍入模式),分别总结如下。 一、RoundingMode 详解 ROUND_UP 进位制:不管保留数字后面是大是小 (0 除外) 都会进 1。结果会向原点的反方向对齐,正...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。