首页 > 其他分享 >BigDecimal的基本使用

BigDecimal的基本使用

时间:2024-03-05 15:34:55浏览次数:26  
标签:基本 运算 NumberFormat num1 使用 new num2 BigDecimal

BigDecimal的基本使用

BigDecimal是Java中用于处理高精度数值的类。它可以表示任意精度的小数,并提供了各种数值运算的方法。

1、创建 BigDecimal 对象

BigDecimal类提供了多个方法来创建BigDecimal对象,下面是一些常用的方法:
 - BigDecimal(String val):使用字符串作为参数创建BigDecimal对象。

BigDecimal number = new BigDecimal("10.5");
  • BigDecimal(double val):使用浮点数作为参数创建BigDecimal对象。
BigDecimal number = new BigDecimal(10.5);
  • BigDecimal(int val):使用整数作为参数创建BigDecimal对象。
BigDecimal number = new BigDecimal(10);
  • BigDecimal(BigInteger val):使用BigInteger对象作为参数创建BigDecimal对象。
BigInteger bigInteger = new BigInteger("123456789");
BigDecimal number = new BigDecimal(bigInteger);
  • BigDecimal.valueOf(double val):使用浮点数作为参数创建BigDecimal对象,它会自动转换为字符串。
BigDecimal number = BigDecimal.valueOf(10.5);

除了以上的方法,BigDecimal类还提供了其他一些方法用于创建BigDecimal对象,可以根据不同的需求选择合适的方法。在使用BigDecimal类时,应避免使用浮点数来创建BigDecimal对象,因为浮点数在计算机中表示的精度是有限的,可能会导致结果不准确。最好使用字符串、整数或BigInteger对象来创建BigDecimal对象,以保证精度和准确性。

2、进行数值运算

在使用BigDecimal进行数值运算时,需要注意BigDecimal是不可变的,即每次运算都会返回一个新的BigDecimal对象。下面是一些常用的数值运算方法:

方法 描述 示例
add 加法运算 num1.add(num2)
subtract 减法运算 num1.subtract(num2)
multiply 乘法运算 num1.multiply(num2)
divide 除法运算 num1.divide(num2, 2, RoundingMode.HALF_UP)
remainder 求余数运算 num1.remainder(num2)
  • 加法运算:使用add方法进行加法运算。
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("20");
BigDecimal sum = num1.add(num2); // 30
  • 减法运算:使用subtract方法进行减法运算。
BigDecimal num1 = new BigDecimal("20");
BigDecimal num2 = new BigDecimal("10");
BigDecimal diff = num1.subtract(num2); // 10
  • 乘法运算:使用multiply方法进行乘法运算。
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("2");
BigDecimal product = num1.multiply(num2); // 20
  • 除法运算:使用divide方法进行除法运算,可以指定除法的精度和舍入模式。
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("3");
BigDecimal quotient = num1.divide(num2, 2, RoundingMode.HALF_UP); // 3.33 (保留两位小数,四舍五入)
  • 求余数运算:使用remainder方法进行求余数运算。
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("3");
BigDecimal remainder = num1.remainder(num2); // 1

以上只是一些常用的数值运算方法,BigDecimal还提供了其他一些方法用于数值运算。在进行数值运算时,注意要指定精度和舍入模式,以保证运算结果的准确性和所需的精度。

3、BigDecimal 数值格式化

在使用 BigDecimal 进行数值格式化时,可以使用以下相关的 API:

NumberFormat.getInstance(): 获取默认的 NumberFormat 实例。
NumberFormat.getCurrencyInstance(): 获取货币格式的 NumberFormat 实例。
NumberFormat.getPercentInstance(): 获取百分比格式的 NumberFormat 实例。
NumberFormat.setMaximumFractionDigits(): 设置要保留的小数位数。
NumberFormat.setMinimumFractionDigits(): 设置最小保留的小数位数。
NumberFormat.setGroupingUsed(): 设置是否使用分组分隔符(如千位分隔符)。
NumberFormat.format(): 格式化 BigDecimal 数值为字符串。

下面是一个示例,演示了如何使用这些 API 进行 BigDecimal 数值的格式化:

import java.math.BigDecimal;
import java.text.NumberFormat;

public class BigDecimalFormatting {
    public static void main(String[] args) {
        BigDecimal number = new BigDecimal("1234567.890");

        // 获取默认的 NumberFormat 实例
        NumberFormat format = NumberFormat.getInstance();
    
        // 设置要保留的小数位数
        format.setMaximumFractionDigits(2);
    
        // 格式化 BigDecimal 数值为字符串
        String formattedNumber = format.format(number);
    
        System.out.println("字符串数据为: " + formattedNumber);
    
        // 使用货币格式化
        NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
        String formattedCurrency = currencyFormat.format(number);
    
        System.out.println("使用货币格式化数据为: " + formattedCurrency);
    
        // 使用百分比格式化
        NumberFormat percentFormat = NumberFormat.getPercentInstance();
        String formattedPercent = percentFormat.format(number);
    
        System.out.println("使用百分比格式化数据为: " + formattedPercent);
    }
}

以上代码使用了 NumberFormat 的不同实例对 BigDecimal 进行了不同类型的格式化,输出结果如下:

字符串数据为: 1,234,567.89
使用货币格式化数据为: $1,234,567.89
使用百分比格式化数据为: 123,456,789%

这里通过 NumberFormat.getInstance() 获取默认的 NumberFormat 实例,然后设置最大小数位数为 2,对 BigDecimal 进行了数值格式化。接着使用 NumberFormat.getCurrencyInstance() 获取了货币格式的实例,对 BigDecimal 进行了货币格式化。最后使用 NumberFormat.getPercentInstance() 获取了百分比格式的实例,对 BigDecimal 进行了百分比格式化。

标签:基本,运算,NumberFormat,num1,使用,new,num2,BigDecimal
From: https://www.cnblogs.com/lidy5439/p/18054156

相关文章

  • 在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invo
    在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invoke-WebRequest、New-Object和Start-BitsTransfer命令来下载文件的方法。使用Invoke-WebRequestInvoke-WebRequest是一个非常强大的命令,用于向网页发送HTTP和HTTPS请求。你可以使用它来下载文......
  • fiddler绑定mumu模拟器安装证书配置抓包使用
    1、在mumu模拟器的浏览器上,访问代理机器的ip加上8888回车,点击下载证书 2、找到mumu模拟器里的设置,找到证书,进行安装  3、证书安装完成之后,找到连接的wifi,点击配置代理为手动 4、以上配置完成就可以抓包成功啦 ......
  • 使用Npoi简单生成Excel并赋值导出小案例
    publicasyncTask<byte[]>ExportNewReportByQuotationId(GuidquotationId){IWorkbookwookbook=newXSSFWorkbook();//EngineerQuoteSheetawaitDoEngineerQuoteWork(wookbook,quotationId);//ILSheetawa......
  • 3562-Linux系统使用手册
      ......
  • snappy压缩格式下使用数字与字符串不等于比较,hiveSQL和sparkSQL表现不一致的行为记录
    Hive版本:2.3.4Spark版本:2.4.0当时用Snappy格式对表进行压缩时,时用<>符号将字符串与数字进行比较会产生不一致的结果。SparkSQL结果并非预期结果。DROPTABLEIFEXISTStest.zero_test;CREATETABLEtest.zero_testTBLPROPERTIES("orc.compress"="SNAPPY")ASSELECT......
  • InheritableThreadLocal 使用举例
    ThreadLocalpublicclassMyThreadextendsThread{privateThreadLocal<String>threadLocal=newThreadLocal<>();publicvoidrun(){threadLocal.set("ThreadLocalvalueinMyThread");System.out.println(&quo......
  • 基本操作之——Unicode编码
    自版本18.11后,支持UTF-81.字符转Unicode码tuple_ord('s',Ord)dev_clear_window()dev_disp_text('\'s\'的Unicode码为'+Ord,'window','center','center','black','box_color','#00ffffc0......
  • 使用 explain 索引优化(转)
    使用explain索引优化(转)原文:https://mp.weixin.qq.com/s?__biz=MzkwNjMwMTgzMQ==&mid=2247490262&idx=1&sn=a67f610afa984ecca130a54a3be453ab&source=41#wechat_redirect1、前言对于互联网公司来说,随着用户量和数据量的不断增加,慢查询是无法避免的问题。一般情况下如果出现慢......
  • Python:如何风骚而又不失优雅的使用Switch...Case
    本渣PHP屌丝一枚,最近在用Python做一个东西碰到了这个问题,在这里给没踩过坑的朋友分享下以Python2.7为例从前有座山碰到参数特别多的情况的时候总是看着一堆if...elseif抓狂,斩不断,理还乱,幸好有Switch...Case可以很方便的处理多种情况的参数但是在Python中没有Switch...Case......
  • 使用go写的etcd转发
    背景:因为公司中的机器比较老。我们的云上监控规定,使用的token的方式来监控,所以无法监控我们的etcd集群,我这里提供的一个etcd数据转发功能,能让监控到etcd集群packagemainimport( "crypto/tls" "crypto/x509" "fmt" "io" "net/http" "os" "sync" "......