java中BigDecimal的应用

简介:

 

我们来看一看java中BigDecimal的用法

 

public class MathUtil {


// 加法
public static Double add(double a,double b,int scal) throws Exception{

    BigDecimal add1 = conversionToBigDecimal(a);
    BigDecimal add2 = conversionToBigDecimal(b);
    Double result = add1.add(add2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;
}

 

// 减法
public static Double subtract(double a,double b,int scal) throws Exception{

    BigDecimal subtract1 = conversionToBigDecimal(a);
    BigDecimal subtract2 = conversionToBigDecimal(b);
    Double result = subtract1.subtract(subtract2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;
}


// 乘法
public static Double multiply(double a,double b,int scal) throws Exception{

    BigDecimal multiply1 = conversionToBigDecimal(a);
    BigDecimal multiply2 = conversionToBigDecimal(b);
    Double result = multiply1.multiply(multiply2).setScale(scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;
}

 
// 除法
public static Double divide(double a,double b,int scal) throws Exception{

    BigDecimal divide1 = conversionToBigDecimal(a);
    BigDecimal divide2 = conversionToBigDecimal(b);
    Double result = divide1.divide(divide2,scal,BigDecimal.ROUND_HALF_UP).doubleValue();
    return result;

}

 

// 类型转换

public static BigDecimal conversionToBigDecimal(Object obj) throws Exception
{
  if (obj instanceof Double)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Float)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Integer)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Long)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Byte)
  {
   return new BigDecimal(obj.toString());
  }
  else if (obj instanceof Short)
  {
   return new BigDecimal(obj.toString());
  }
  else
  {
   throw new Exception("不能转换");
  }
}

 

 

下面我们来看看BigDecimal的setScale方法

 

BigDecimal.setScale()方法用于格式化小数点

 

表示保留一位小数,默认用四舍五入方式
setScale(1)

 

直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_DOWN)

 

进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_UP)

 

四舍五入,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)

 

四舍五入,2.35变成2.3,如果是5则向下舍
setScaler(1,BigDecimal.ROUND_HALF_DOWN)

 


注意点一

scale指的是你小数点后的位数。scale()就是BigDecimal类中的方法。如
BigDecimal b = new BigDecimal("123.456");
b.scale(),返回的就是3

 


注意点二

roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种,如
BigDecimal.ROUND_HALF_UP表示的就是4舍5入

 


注意点三

pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的

 


注意点四

对于一般add、subtract、multiply方法的小数位格式化如下
BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("mData=" + mData);
 

 

 

原帖地址:

http://blog.csdn.net/ahwr24/article/details/7048724

http://blog.csdn.net/zb48857441/article/details/6180958

 

 

 

目录
相关文章
|
21天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
22天前
|
缓存 算法 Java
Java内存管理与调优:释放应用潜能的关键
【4月更文挑战第2天】Java内存管理关乎性能与稳定性。理解JVM内存结构,如堆和栈,是优化基础。内存泄漏是常见问题,需谨慎管理对象生命周期,并使用工具如VisualVM检测。有效字符串处理、选择合适数据结构和算法能提升效率。垃圾回收自动回收内存,但策略调整影响性能,如选择不同类型的垃圾回收器。其他优化包括调整堆大小、使用对象池和缓存。掌握这些技巧,开发者能优化应用,提升系统性能。
|
29天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
21天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
28天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
29天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
13 0
|
1天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。
|
6天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
6天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。