精华内容
下载资源
问答
  • bigdecimal判断小数位数
    2022-04-19 19:23:12
    • 设置保留两位小数 result = 0.20
    DecimalFormat decimalFormat = new DecimalFormat("0.00");
    BigDecimal result = decimalFormat.format(new BigDecimal(0.200000));
    
    • 小数点右移两位 20.0000
    new BigDecimal(0.200000).movePointRight(2);
    
    • 数字转汉字格式
      引入 cn.hutool.core.convert 包
    Convert.digitToChinese(new BigDecimal(500));
    
    更多相关内容
  • java-使用BigDecimal确定小数位数

    千次阅读 2021-02-27 17:01:23
    以下代码无法正常工作: public static int getNumberOfDecimalPlace(double value) { final BigDecimal bigDecimal = new BigDecimal("" + value); final String s = bigDecimal.toPlainString(); System.out....

    我对具有以下getNumberOfDecimalPlace函数感兴趣:

    System.out.println("0 = " + Utils.getNumberOfDecimalPlace(0)); // 0

    System.out.println("1.0 = " + Utils.getNumberOfDecimalPlace(1.0)); // 0

    System.out.println("1.01 = " + Utils.getNumberOfDecimalPlace(1.01)); // 2

    System.out.println("1.012 = " + Utils.getNumberOfDecimalPlace(1.012)); // 3

    System.out.println("0.01 = " + Utils.getNumberOfDecimalPlace(0.01)); // 2

    System.out.println("0.012 = " + Utils.getNumberOfDecimalPlace(0.012)); // 3

    我可以知道如何通过使用BigDecimal实现getNumberOfDecimalPlace吗?

    以下代码无法正常工作:

    public static int getNumberOfDecimalPlace(double value) {

    final BigDecimal bigDecimal = new BigDecimal("" + value);

    final String s = bigDecimal.toPlainString();

    System.out.println(s);

    final int index = s.indexOf('.');

    if (index < 0) {

    return 0;

    }

    return s.length() - 1 - index;

    }

    打印以下内容:

    0.0

    0 = 1

    1.0

    1.0 = 1

    1.01

    1.01 = 2

    1.012

    1.012 = 3

    0.01

    0.01 = 2

    0.012

    0.012 = 3

    但是,对于案例0、1.0,效果不佳.我希望结果是“ 0”.但是结果却是“ 0.0”和“ 1.0”.结果将返回“ 1”.

    展开全文
  • BigDecimal 运算及取小数位

    千次阅读 2019-11-04 17:06:32
    Java在java.math包中提供的API类BigDecimal,用来对超过16有效的数进行精确的运算。双精度浮点型变量double可以处理16有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做...

     一、介绍 

         Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

    二、构造器描述

    BigDecimal(int)           创建一个具有参数所指定整数值的对象。
    BigDecimal(double)    创建一个具有参数所指定双精度值的对象。
    BigDecimal(long)        创建一个具有参数所指定长整数值的对象。
    BigDecimal(String)      创建一个具有参数所指定以字符串表示的数值的对象。

    三、运算方法描述

    add(BigDecimal)        BigDecimal对象中的值相加,然后返回这个对象。
    subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
    multiply(BigDecimal)  BigDecimal对象中的值相乘,然后返回这个对象。
    divide(BigDecimal)     BigDecimal对象中的值相除,然后返回这个对象。
    toString()                将BigDecimal对象的数值转换成字符串。
    doubleValue()          将BigDecimal对象中的值以双精度数返回。
    floatValue()             将BigDecimal对象中的值以单精度数返回。
    longValue()             将BigDecimal对象中的值以长整数返回。
    intValue()               将BigDecimal对象中的值以整数返回。

    下面是一个工具类,该工具类提供加,减,乘,除运算。

    public class Arith {  
        /** 
         * 提供精确加法计算的add方法 
         * @param value1 被加数 
         * @param value2 加数 
         * @return 两个参数的和 
         */  
        public static double add(double value1,double value2){  
            BigDecimal b1 = new BigDecimal(Double.valueOf(value1));  
            BigDecimal b2 = new BigDecimal(Double.valueOf(value2));  
            return b1.add(b2).doubleValue();  
        }  
          
        /** 
         * 提供精确减法运算的sub方法 
         * @param value1 被减数 
         * @param value2 减数 
         * @return 两个参数的差 
         */  
        public static double sub(double value1,double value2){  
            BigDecimal b1 = new BigDecimal(Double.valueOf(value1));  
            BigDecimal b2 = new BigDecimal(Double.valueOf(value2));  
            return b1.subtract(b2).doubleValue();  
        }  
          
        /** 
         * 提供精确乘法运算的mul方法 
         * @param value1 被乘数 
         * @param value2 乘数 
         * @return 两个参数的积 
         */  
        public static double mul(double value1,double value2){  
            BigDecimal b1 = new BigDecimal(Double.valueOf(value1));  
            BigDecimal b2 = new BigDecimal(Double.valueOf(value2));  
            return b1.multiply(b2).doubleValue();  
        }  
          
        /** 
         * 提供精确的除法运算方法div 
         * @param value1 被除数 
         * @param value2 除数 
         * @param scale 精确范围 
         * @return 两个参数的商 
         * @throws IllegalAccessException 
         */  
        public static double div(double value1,double value2,int scale) throws IllegalAccessException{  
            //如果精确范围小于0,抛出异常信息  
            if(scale<0){           
                throw new IllegalAccessException("精确度不能小于0");  
            }  
            BigDecimal b1 = new BigDecimal(Double.valueOf(value1));  
            BigDecimal b2 = new BigDecimal(Double.valueOf(value2));  
            return b1.divide(b2, scale).doubleValue();      
        }  
    } 

    四、常用方法集锦

    scale()   小数点后的位数

    BigDecimal.setScale()方法用于格式化小数点
    setScale(1)表示保留一位小数,默认用四舍五入方式 
    setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 
    setScale(1,BigDecimal.ROUND_UP)进位处理(进一法),2.35变成2.4 
    setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4

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

    setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入

    setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样

    setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

    五、格式化

           NumberFormat是所有数值格式的抽象基类。此类提供格式化和解析数值的接口,可用于格式化和解析任何语言环境的数值。使代码能够完全独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。

    getInstance 或 getNumberInstance 获取常规数值格式。
    getIntegerInstance 只保留整数数值格式。
    getCurrencyInstance 获取货币数值格式。
    getPercentInstance 获取显示百分比的格式。使用此格式,小数 0.53 将显示为 53%。
    setMinimumFractionDigits 控制数值的显示。
     

    /** 
     * 格式化 
     */  
    @Test  
    public void test3() {  
        NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用  
        NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用  
        percent.setMaximumFractionDigits(3); //百分比小数点最多3位  
      
        BigDecimal loanAmount = new BigDecimal("150.48"); //贷款金额  
        BigDecimal interestRate = new BigDecimal("0.008"); //利率  
        BigDecimal interest = loanAmount.multiply(interestRate); //相乘  
      
        System.out.println("贷款金额:\t" + currency.format(loanAmount)); //贷款金额: ¥150.48  
        System.out.println("利率:\t" + percent.format(interestRate));  //利率: 0.8%  
        System.out.println("利息:\t" + currency.format(interest)); //利息: ¥1.20  
    }  
    @Test  
    public void test3() {  
        DecimalFormat df = new DecimalFormat();  
        double data = 1234.56789; //格式化之前的数字  
        //1、定义要显示的数字的格式(这种方式会四舍五入)  
        String style = "0.0";  
        df.applyPattern(style);  
        System.out.println("1-->" + df.format(data));  //1234.6  
      
        //2、在格式后添加诸如单位等字符  
        style = "00000.000 kg";  
        df.applyPattern(style);  
        System.out.println("2-->" + df.format(data));  //01234.568 kg  
      
        //3、 模式中的"#"表示如果该位存在字符,则显示字符,如果不存在,则不显示。  
        style = "##000.000 kg";  
        df.applyPattern(style);  
        System.out.println("3-->" + df.format(data));  //1234.568 kg  
      
        //4、 模式中的"-"表示输出为负数,要放在最前面  
        style = "-000.000";  
        df.applyPattern(style);  
        System.out.println("4-->" + df.format(data)); //-1234.568  
     
        //5、 模式中的","在数字中添加逗号,方便读数字  
        style = "-0,000.0#";  
        df.applyPattern(style);  
        System.out.println("5-->" + df.format(data));  //5-->-1,234.57  
      
        //6、模式中的"E"表示输出为指数,"E"之前的字符串是底数的格式,  
        // "E"之后的是字符串是指数的格式  
        style = "0.00E000";  
        df.applyPattern(style);  
        System.out.println("6-->" + df.format(data));  //6-->1.23E003  
      
        //7、 模式中的"%"表示乘以100并显示为百分数,要放在最后。  
        style = "0.00%";  
        df.applyPattern(style);  
        System.out.println("7-->" + df.format(data));  //7-->123456.79%  
      
        //8、 模式中的"\u2030"表示乘以1000并显示为千分数,要放在最后。  
        style = "0.00\u2030";  
        //在构造函数中设置数字格式  
        DecimalFormat df1 = new DecimalFormat(style);  
        //df.applyPattern(style);  
        System.out.println("8-->" + df1.format(data));  //8-->1234567.89‰  
    }  
    

    六、比较大小

    BigDecimal是通过使用compareTo(BigDecimal)来进行两个BigDecimal比较的

    public void testCompare(){
       BigDecimal a=new BigDecimal("20");
       a.compareTo(b)==1;   //a>b
       a.compareTo(b)==-1;  //a<b
       a.compareTo(b)==0;   //a=b
       a.compareTo(b)<1;    //a<=b
       a.compareTo(b)>-1;   //a>=b
    
    }

    6.1 科学计数法

    @Test  
    public void test5() {  
        BigDecimal bd = new BigDecimal("3.40256010353E11");  
        String result = bd.toPlainString();  
        System.out.println(result);  //340256010353  
    }  

    6.2  处理价格中逗号

    @Test  
    public void test1() {  
        java.util.StringTokenizer st = new StringTokenizer( "123,456,789", ",");  
        StringBuffer sb = new StringBuffer();  
        while(st.hasMoreTokens())   {  
            sb.append(st.nextToken());  
        }  
        System.out.println(sb);  //123456789  
    }  
      
    @Test  
    public void test2() {  
        String str = "123,456,789";  
        str = str.replace(",", "");  
        System.out.println(str);  //123456789  
    }  

     

    展开全文
  • BigDecimal保留小数精确位数
    /**
         * 
         * @param number 数值字符串
         * @param digit 精确小数位数
         * @return
         * @throws CustomException
         */
        public String decimalTrans(String number, int digit) throws CustomException {
            try {
                if (StringUtils.isBlank(number)) {
                    return number;
                }
                BigDecimal decimal = new BigDecimal(number);
                decimal = decimal.setScale(digit, RoundingMode.HALF_UP);
                return decimal.stripTrailingZeros().toPlainString();
            } catch (NumberFormatException e) {
                throw new CustomException("数值转换错误:非数值类型");
            }
        }

    BigDecimal.setScale(int newScale, int roundingMode); // 设置格式化小数位,newScale是小数的保留位数,roundingMode是小数的保留模式。

    其中BigDecimal提供了roundingMode常量,常见的有:

    1. ROUND_UP

    BigDecimal a = new BigDecimal("2.224567").setScale(2, BigDecimal.ROUND_UP);
    System.out.println(a); // 2.23 删除多余小数位,进位处理

    2.ROUND_DOWN

    BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);
    System.out.println(b);// 2.22 删除多余小数位

    3.ROUND_CEILING

    BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING);
    System.out.println(c); // 2.23 如果是正数,相当于BigDecimal.ROUND_UP,删除多余小数位,进位处理
     
    BigDecimal d = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING);
    System.out.println(d); // -2.22 如果是负数,相当于BigDecimal.ROUND_DOWN,删除多余小数位

    4.ROUND_FLOOR

    BigDecimal e = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);
    System.out.println(e); // 2.22 如果是正数,相当于BigDecimal.ROUND_DOWN,直接删除多余小数位
    		
    BigDecimal f = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR);
    System.out.println(f); // -2.23 如果是负数,相当于BigDecimal.ROUND_HALF_UP

    5.ROUND_HALF_UP

    BigDecimal g = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println(g); // 2.23  四舍五入(若舍弃部分>=.5,就进位)

    6.ROUND_HALF_DOWN

    BigDecimal h = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
    System.out.println(h); // 2.22  四舍五入(若舍弃部分>.5,就进位)

    7.ROUND_HALF_EVEN

    BigDecimal i = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
    System.out.println(i);//2.22 如果舍弃部分左边的数字为偶数(此例为2偶数),则作ROUND_HALF_DOWN 
    		
    BigDecimal j = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
    System.out.println(j);//2.22 如果舍弃部分左边的数字为奇数(此例为1奇数),则作ROUND_HALF_UP
    

    8.ROUND_UNNECESSARY

    BigDecimal k = new BigDecimal("2.215").setScale(3, BigDecimal.ROUND_UNNECESSARY);
    System.out.println(k);
    //断言请求的操作具有精确的结果,因此不需要舍入。
    //如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

    String toPlainString(); // 返回不带指数字段的此BigDecimal的字符串表示形式。就是直接显示浮点数据,不用科学计数法表示。

    BigDecimal stripTrailingZeros(); // 返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。就是去除末尾多余的0

    展开全文
  • 关于BigDecimal截取小数位数

    千次阅读 2017-09-12 15:06:52
    使用new BigDecimal(value).setScale(2)不报错,得到2222.22 2.数据库里存2222.228888 使用new BigDecimal(value).setScale(2)报错,Rounding necessary 使用new BigDecimal(value).setScale(2,BigDecimal.ROUND_...
  • .stripTrailingZeros().toPlainString() BigDecimal bigDecimal = new BigDecimal("22.2200"); BigDecimal newData = bigDecimal.stripTrailingZeros().toPlainString() 结果:newData = 22.22 BigDecimal ...
  • Java-BigDecimal(小数精确处理) 为什么要用BigDecimal? 我们先看一下,下面这个现象 那为什么会出现这种情况呢? 因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。 根本...
  • bigdecimal 保留小数位

    千次阅读 2020-12-24 09:03:18
    public class test1_format { ... BigDecimal decimal = new BigDecimal("1.12345"); System.out.println(decimal); BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN); ...
  • BigDecimal去除小数位

    千次阅读 2022-04-15 12:46:26
    BigDecimal去除小数位
  • 实际开发中,会出现数值为空的情况,这时类的getter和setter方法应该判断是否传入为空或者直接在Bigdecimal类型属性上初始化,如:private BigDecimal income = new BigDecimal(0);//收入private BigDecimal cess = ...
  • 判断是几小数

    千次阅读 2018-05-22 16:24:02
    package test; public class PointDemo { public static void main(String[] args) { String s = "^[0-9]+(\\.[0-9]{1,2})?... System.out.println("符合一或者两位小数"); } } }
  • BigDecimal 保留小数位/保留两位小数

    千次阅读 2021-07-27 20:35:19
    BigDecimal decimal = new BigDecimal("1.98764432"); System.out.println(decimal); BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN); System.out.println(setScale); BigDecimal ...
  • BigDecimal 保留小数位

    2021-09-18 15:44:13
    Bigdecimal记录 BigDecimal decimal = new BigDecimal("1.55"); BigDecimal round_ceiling = decimal.setScale(1,BigDecimal.ROUND_CEILING); System.out.println("round_ceiling = " + round_ceiling + "\n"); ...
  • BigDecimal保留小数

    千次阅读 2021-06-03 17:51:20
    保留小数常见的六种方式: ROUND_UP:舍入模式从零开始。 始终在非零丢弃分数之前增加数字。 案例:
  • BigDecimal保留小数位

    千次阅读 2017-10-25 20:45:56
    package com.algorithms;import java.math.BigDecimal; import java.util.Scanner;/** * 调和级数求和 * @author LYY * */ public class TiaoHeJiShuTest { public static void main(String[] args) { System
  • 数据库中存放BigDecimal类型的数据,如果存放4或者4.1的话,在数据库中会存放4.0000和4.1000,此时在前台显示会不合适,故需要去除.和0,方法如下: 参数是BigDecimal的toString()。 public BigDecimal ...
  • BigDecimal设置小数位数

    万次阅读 2011-09-26 14:10:27
    public static void main(String[] args) {  BigDecimal x = new BigDecimal(2.22262222222222222222222222).setScale(3,BigDecimal.ROUND_HALF_UP)
  • BigDecimal的运算——加减乘除 ```java BigDecimal b1=new BigDecimal(0.1); //0.0299999999999999988897769753748434595763683319091796875 BigDecimal b2=new BigDecimal("0.03"); //0.03 BigDecimal b3=new ...
  • BigDecimal保留小数处理

    千次阅读 2020-12-22 08:40:56
    最近在处理支付相关的需求,涉及到金额的问题,采用传统的基本数据类型处理会存在误差,因此采用BigDecimal对象进行处理。一、构造BigDecimal对象的方式BigDecimal(int) 创建一个具有参数所指定整数值的对象。...
  • bigdecimal保留小数位

    千次阅读 2018-08-24 16:14:54
    bigdecimal保留小数位 ROUND_DOWN:直接去掉多余的位数 ROUND_UP:进位处理,与四舍五入相比,指定位数的后一数无论是多少,都会进位 ROUND_CEILING:天花板(向上),正数进位向上,负数舍向上 ROUND_FLOOR:...
  • 直接舍去后面的小数位,同时保留小数位的最后一+1) 例:new BigDecimal("1.12087").setScale(3,BigDecimal.ROUND_UP); -> 1.121 ROUND_HALF_UP 常说的四舍五入,当舍弃部分大于等于>...
  • 使用SpringCloudAlibaba+Vue(ant-design)进行项目开发,一个BigDecimal类型的数,要求保留5位小数。 1、格式化数据 BigDecimal对象格式化可以使用DecimalFormat对象,首先看一下如何解决上述问题 public class ...
  • 如何获取BigDecimal的整数和小数部分

    千次阅读 2022-06-25 17:03:22
    如何获取BigDecimal的整数和小数部分
  • What is the maximum number of digits we can have after the decimal point of a BigDecimal value in Java?解决方案It's (almost) unlimited. You can store roughly 2 billion digits after the decimal point ...
  • 小数位数BigDecimal.setScale()方法用于格式化小数点 setScale(1)表示保留一小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_...
  • Java BigDecimal判断是整数还是小数

    万次阅读 2019-04-03 14:32:29
    public static String compareNumber(BigDecimal number,int scale){ if (!"".equals(number) && number != null){ if (new BigDecimal(number.intValue()).compareTo(number)==0){ //整数 return String....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,464
精华内容 8,185
关键字:

bigdecimal判断小数位数