2024年最全详解BigDecimal_bigdecimal底层实现(1),HarmonyOS鸿蒙个人信息界面设计

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

3.注意事项

4.底层实现原理


1.概述

精度丢失,由于现代计算机中采用了浮点数来表示小数,这种表示法会存在精度丢失的问题。想要了解精度丢失的原因,可以去看博主另一篇文章,里面详细解释了其中的原因:

详解浮点数__BugMan的博客-CSDN博客

下面举一个精度丢失的例子:

// 商品价格
double price1 = 19.99;
double price2 = 9.99;
double price3 = 4.99;

// 商品数量
int quantity1 = 2;
int quantity2 = 3;
int quantity3 = 1;

// 计算每种商品的小计
double subtotal1 = price1 * quantity1;
double subtotal2 = price2 * quantity2;
double subtotal3 = price3 * quantity3;

// 计算总价
double total = subtotal1 + subtotal2 + subtotal3;

// 输出结果
System.out.println("商品1小计:" + subtotal1);
System.out.println("商品2小计:" + subtotal2);
System.out.println("商品3小计:" + subtotal3);
System.out.println("购物车总价:" + total);

摸出手机算一下就知道,本来总价应该等于74.94,但是实际的运行结果等于:

这种精度丢失在诸如金融、航天等需要高精度运算的场景下是无法接受的,为了保证精度,JDK中推出了BigDecimal类型,用来进行浮点数的精确计算。将上面的例子改为BigDecimal后:

// 商品价格
BigDecimal price1 = new BigDecimal("19.99");
BigDecimal price2 = new BigDecimal("9.99");
BigDecimal price3 = new BigDecimal("4.99");
        
// 商品数量
int quantity1 = 2;
int quantity2 = 3;
int quantity3 = 1;
        
// 计算每种商品的小计
BigDecimal subtotal1 = price1.multiply(new BigDecimal(quantity1));
BigDecimal subtotal2 = price2.multiply(new BigDecimal(quantity2));
BigDecimal subtotal3 = price3.multiply(new BigDecimal(quantity3));
        
// 计算总价
BigDecimal total = subtotal1.add(subtotal2).add(subtotal3);
        
// 输出结果
System.out.println("商品1小计:" + subtotal1);
System.out.println("商品2小计:" + subtotal2);
System.out.println("商品3小计:" + subtotal3);
System.out.println("购物车总价:" + total);

结果:

2.基本API

2.1.创建 BigDecimal 对象:

  • BigDecimal(String val):使用字符串表示创建一个 BigDecimal对象。
  • BigDecimal(double val):使用双精度浮点数创建一个 BigDecimal对象。
  • BigDecimal(BigInteger val):使用 BigInteger对象创建一个BigDecimal 对象。
BigDecimal bigDecimal1=new BigDecimal("0.8");
BigDecimal bigDecimal2=new BigDecimal(0.8);
BigDecimal bigDecimal3=new BigDecimal(8);

2.3.基本运算方法:

  • add(BigDecimal augend):加法操作,将当前 BigDecimal 对象与参数相加。
  • subtract(BigDecimal subtrahend):减法操作,将当前 BigDecimal 对象减去参数。
  • multiply(BigDecimal multiplicand):乘法操作,将当前 BigDecimal 对象与参数相乘。
  • divide(BigDecimal divisor):除法操作,将当前 BigDecimal 对象除以参数。
  • pow(int exponent):指数操作,将当前 BigDecimal 对象的幂次方计算。
BigDecimal bigDecimal1=new BigDecimal("0.8");
BigDecimal bigDecimal2=new BigDecimal("0.2");
System.out.println(bigDecimal1.add(bigDecimal2));
System.out.println(bigDecimal1.multiply(bigDecimal2));
System.out.println(bigDecimal1.divide(bigDecimal2));
System.out.println(bigDecimal1.pow(2));

2.4.精度控制方法:

  • setScale(int newScale):设置 BigDecimal对象的精度(小数点后的位数)。
  • setScale(int newScale, RoundingMode roundingMode):设置 BigDecimal 对象的精度,并指定舍入模式。
  • round(MathContext mc):使用指定的舍入规则舍入当前 BigDecimal对象。
BigDecimal number = new BigDecimal("123.456789");
BigDecimal roundedNumber = number.setScale(2, BigDecimal.ROUND_HALF_UP);

2.5.比较

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

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值