首页 > 其他分享 >BigDecimal转换

BigDecimal转换

时间:2024-09-12 16:53:45浏览次数:13  
标签:转换 BigDecimal System value println new out

代码检测爆出代码质量:使用浮点数进行精确计算

BigDecimal转换_BigDecimal

简单说就是不能用doule,不精确,要用BigDecimal BigDecimal是一个对象,它的加减乘除等都跟数字类型不一样,以下就是它的一些常用方法

new一个BigDecimal

BigDecimal num1=new BigDecimal("0.12");

输出结果

BigDecimal转换_类型转换_02

add():相当于加

a.add(b)相当于a+b

BigDecimal num=new BigDecimal("123.22");
		BigDecimal num1=new BigDecimal("0.12");
		System.out.println(num1.add(num));

sub():相当于减

a.subtract(b)相当于a-b

BigDecimal a=new BigDecimal("123.22");
		BigDecimal b=new BigDecimal("0.12");
		System.out.println(a.subtract(b));

multiply():相当于乘

a.multiply(b)相当于乘

BigDecimal a=new BigDecimal("5.22");
		BigDecimal b=new BigDecimal("3.12");
		System.out.println(a.multiply(b));

divide()相当于除

a.divide(b)相当于除,需要注意的是,如果除不尽,就会报错

BigDecimal a=new BigDecimal("16.00");
		BigDecimal b=new BigDecimal("4.00");
		System.out.println(a.divide(b));

java.lang.ArithmeticException

不整除的话会报错,通过指定小数位数和四舍五入规则解决。传入第二个参数,指定小数位个数,并传入第三个参数,指定四舍五入规则。

BigDecimal a=new BigDecimal("17");
		BigDecimal b=new BigDecimal("8.30");
		System.out.println(a.divide(b,2,BigDecimal.ROUND_HALF_UP));

compareTo()比较大小

通过BigDecimal的compareTo方法来进行比较。返回的结果是int类型,-1表示小于,0是等于,1是大于。

if(a.compareTo(b) == -1){
    System.out.println("a小于b");
}
 
if(a.compareTo(b) == 0){
    System.out.println("a等于b");
}
 
if(a.compareTo(b) == 1){
    System.out.println("a大于b");
}
 
if(a.compareTo(b) > -1){
    System.out.println("a大于等于b");
}
 
if(a.compareTo(b) < 1){
    System.out.println("a小于等于b");
}

Double和BigDecimal互相转换

double转BigDecimal

  • new BigDecimal(double val):-------------------不推荐 会有一个精度的问题,如下:
  • 使用BigDecimal的静态方法:-------------------推荐
BigDecimal decimalD=BigDecimal.valueOf(a);

BigDecimal转换_spring_03

  • 使用Double.toString,-------------------推荐
BigDecimal decimalC=new BigDecimal(Double.toString(a));

BigDecimal转换_BigDecimal_04

BigDecimal转double

doubleValue

BigDecimal a=new BigDecimal("23.556");	
		Double b=a.doubleValue();

Float和BigDecimal互相转换

Float转BigDecimal

  • 先用toString,再传入BigDecimal,不损失精度 ----------推荐
float a=545.56f;
		System.out.println(new BigDecimal(Float.toString(a)));

BigDecimal转换_springboot_05

  • 用BigDecimal.valueOf,损失精度 --------------------不推荐
float a=545.56f;
		System.out.println(BigDecimal.valueOf(a));

BigDecimal转换_BigDecimal_06

BigDecimal转Float

使用floatValue

BigDecimal a=new BigDecimal(50);
		System.out.println(a.floatValue());

int和BigDecimal互相转换

int转BigDecimal

int b = 5;
        BigDecimal a = new BigDecimal(b);

BigDecimal转int

BigDecimal b = new BigDecimal(12);
            int c = b.intValue();

Long和BigDecimal互相转换

long转BigDecimal

long b = 5;
        BigDecimal a = new BigDecimal(b);

BigDecimal转Long

longValue会损失精度,四舍五入取整,可以用doubleValue代替

BigDecimal b = new BigDecimal(12);
        Long c = b.longValue();

判断BigDecimal是否为0

BigDecimal值的判断用equals

不能用常规的==0判断,因为它是对象,用equals判断,它首先要判断scale,也就是BigDecimal的小数位数,不但小数前的值得一样,就连位数和小数点后的值必须也一样,如下,10和10.0是false,所以equals也不能用

BigDecimal转换_spring_07

判断是否为0

使用Bigdecimal.ZERO,true为真,false为假Bigdecimal.ZERO

a.compareTo(BigDecimal.ZERO)==0

两位小数

BigDecimal price = new BigDecimal("5.5564").setScale(2,BigDecimal.ROUND_HALF_UP);//保留两位小数四舍五入5.56;

object转bigdecimal工具类

该工具类来源https://blog.csdn.net/jerrygaoling/article/details/112991645

/**
     * Object转BigDecimal类型
     *
     * @param value 传入Object值
     * @return 转成的BigDecimal类型数据
     */
    public static BigDecimal ToBigDecimal(Object value) {
        BigDecimal bigDec = null;
        if (value != null) {
            if (value instanceof BigDecimal) {
            	bigDec = (BigDecimal) value;
            } else if (value instanceof String) {
            	bigDec = new BigDecimal((String) value);
            } else if (value instanceof BigInteger) {
            	bigDec = new BigDecimal((BigInteger) value);
            } else if (value instanceof Number) {
            	bigDec = new BigDecimal(((Number) value).doubleValue());
            } else {
                throw new ClassCastException("Can Not make [" + value + "] into a BigDecimal.");
            }
        }
        return bigDec;
    }

标签:转换,BigDecimal,System,value,println,new,out
From: https://blog.51cto.com/u_16390833/11992128

相关文章

  • 通用USB转RS-485/422 转换器-DAM3232N
    一、概述    DAM-3232N是一款通用的USB/RS-485/422转换器,无需外加电源、兼容USB、RS-422、RS-485标准,能够将单端的USB信号转换为平衡差分的RS-422或RS-485信号,提供每线浪涌保护功率,以及各种原因在线路上产生的浪涌电压并且极小的极间电容保证了RS-485/RS-42......
  • 如何将图片转换为向量?(通过DashScope API调用)
    本文介绍如何通过模型服务灵积DashScope将图片转换为向量,并入库至向量检索服务DashVector中进行向量检索。模型服务灵积DashScope,通过灵活、易用的模型API服务,让各种模态模型的能力,都能方便的为AI开发者所用。通过灵积API,开发者不仅可以直接集成大模型的强大能力,也可以对模型进......
  • 通过ModelScope开源Embedding模型将图片转换为向量
    本文介绍如何通过ModelScope魔搭社区中的视觉表征模型将图片转换为向量,并入库至向量检索服务DashVector中进行向量检索。ModelScope魔搭社区旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单。ModelScope魔搭......
  • python怎么将将日期yyyyMMdd转换为yyyy-MM-dd格式?
    一、代码实现fromdatetimeimportdatetime#日期格式转换defconvert_date_format(date_str):#假设date_str是有效的yyyyMMdd格式date_obj=datetime.strptime(date_str,'%Y%m%d')returndate_obj.strftime('%Y-%m-%d')#示例使用date_str='20......
  • c++ string 转换成 guid
      在C++中,将一个字符串转换为GUID(GloballyUniqueIdentifier)可以通过以下方法实现。GUID通常是128位(16字节)的标识符,以标准格式表示,例如:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。在C++中,常用的库之一是WindowsAPI,它提供了处理GUID的相关功能。这里是一个示例代码,将字符串转换......
  • nnunetv2系列:2D实例分割数据集转换
    nnunetv2系列:2D实例分割数据集转换2D实例分割数据集转换这里主要参考官方源文件nnUNet/nnunetv2/dataset_conversion/Dataset120_RoadSegmentation.py,注释了一些不必要的操作。数据集下载链接:massachusetts-roads-dataset重要提示:nnU-Net只能用于使用无损(或无)压缩......
  • 从注册到实战,超简单图床使用(附代码实现本地图片转换为网络url)
    1.注册一个薄荷图床的的账号,并添加客服申请api测试权限​ 查看api文档 我们只需关注两个必选参数即可,如图中红色标注2.编写pthon代码​ 其他语言也可以,只要发送post请求即可,注意url、token和照片需要更改为你自己的importrequestsdefpython_demo():url='https://......
  • Java的class与String互相转换,自定义密码策略
    目的客户要求密码校验方式,用自己的认证方式。提供一种方案,在不出补丁的情况下,解决这个问题。原理1、本地写一个类,用客户想要的方案,实现密码校验的接口,编译成class类。2、然后把这个class类,先转换成二进制,再转换成16进制的字符串。3、将字符串写到客户的数据库里。4、重启服务,在......
  • Python Pyqt5 将ui文件转换成py文件
    命令行pyuicyour_ui_file.ui-ooutput_file.py如果是虚拟环境,则需要提前进入虚拟环境中执行pyuic命令uitopy文件的使用如果是ui文件转换过来的py文件,不要直接在此py文件中编写代码。如果你的ui文件发生变换就需要重新生成py文件,这个时候新的py文件就会覆盖历史的。正确使......
  • shp文件转换为CAD文件 (第三版) 这个软件的界面颜值挺高的
    上个月写了一个工具是关于shp文件转换为CAD文件,<shp文件转换为CAD文件(dxf格式)>前天写了一篇shp文件转换为CAD文件的博客(公众号),<shp文件转换为CAD文件 (改进版)>今天是周六,也没啥事做,所以我们继续来完善这个小工具吧!有个朋友反映这个小工具的存在可以改进的地方、问题,并......