当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java BigDecimal setScale()用法及代码示例


java.math.BigDecimal.setScale()用于设置BigDecimal的小数位数。此方法在当前BigDecimal上执行操作,由此方法将被调用。

Java中提供了三个setScale()方法重载,如下所示:


  • setScale(int newScale)
  • setScale(int newScale,int roundingMode)
  • setScale(int newScale,RoundingMode roundingMode)

注意:从Java 9开始不推荐使用setScale(int newScale,int roundingMode)。

setScale(int newScale)

当确保存在指定比例尺和正确值的BigDecimal时,此调用通常用于增加比例尺。如果用户知道BigDecimal在其小数部分的末尾具有足够多的零以允许在不更改其值的情况下进行重新缩放,则该调用还可用于减小比例。
用法:

public BigDecimal setScale(int newScale)

参数:此方法接受参数newScale,该参数用于设置此BigDecimal的比例。
返回值:此方法返回一个BigDecimal,其小数位数为指定值。
异常:如果指定的缩放操作需要四舍五入,则算术异常被抛出。
注意:由于BigDecimal对象是不可变的,因此此方法的调用不会导致原始对象被修改,因此setScale返回具有适当比例的对象。返回的对象可能会也可能不会被重新分配。

下面的程序用于说明BigDecimal的setScale()方法。

// Java program to demonstrate 
// setScale() method of BigDecimal 
  
import java.math.BigDecimal; 
  
public class GFG { 
    public static void main(String[] args) 
    { 
        // BigDecimal object to store the result 
        BigDecimal res; 
  
        // For user input 
        // Use Scanner or BufferedReader 
  
        // Object of String created 
        // Holds the value 
        String input1 
            = "31452678569.25"; 
  
        // Convert the string input to BigDecimal 
        BigDecimal a 
            = new BigDecimal(input1); 
  
        // Scale for BigDecimal 
        int newScale = 4; 
  
        // Using setScale() method 
        res = a.setScale(newScale); 
  
        // Display the result in BigDecimal 
        System.out.println(res); 
    } 
}
输出:
31452678569.2500

setScale(int newScale, int roundingMode)

此方法用于计算一个BigDecimal,其小数位数是指定值,其未缩放的值是通过将BigDecimal的未缩放值乘以或除以适当的10的幂来确定其总值来确定的。如果通过操作减小了比例,则必须将未比例的值相除(而不是相乘)。指定的舍入模式将应用于除法。
用法:

public BigDecimal setScale(int newScale, int roundingMode)

参数:此方法接受两个参数newScale(用于设置此BigDecimal的比例)和roundingMode(用于设置结果的舍入值)。
返回值:此方法返回一个BigDecimal,其小数位数为指定值。
异常:方法抛出算术异常如果roundingMode为UNNECESSARY,并且指定的缩放操作将需要舍入。该方法也抛出IllegalArgumentException如果roundingMode不代表有效的舍入模式。

下面的程序用于说明BigDecimal的setScale()方法。
示例1:

// Java program to demonstrate 
// setScale() method of BigDecimal 
  
import java.math.BigDecimal; 
  
public class GFG { 
    public static void main(String[] args) 
    { 
        // BigDecimal object to store the result 
        BigDecimal res; 
  
        // For user input 
        // Use Scanner or BufferedReader 
  
        // Object of String created 
        // Holds the value 
        String input1 
            = "31452678569.24"; 
  
        // Convert the string input to BigDecimal 
        BigDecimal a 
            = new BigDecimal(input1); 
  
        // Scale for BigDecimal 
        int newScale = -1; 
        try { 
  
            // Using setScale() method 
            res = a.setScale(newScale, 1); 
  
            // Display the result in BigDecimal 
            System.out.println(res); 
        } 
        catch (Exception e) { 
  
            // Print Exception 
            System.out.println(e); 
        } 
    } 
}
输出:
3.145267856E+10

示例2:该程序显示此方法引发的异常。


// Java program to demonstrate 
// setScale() method of BigDecimal 
  
import java.math.BigDecimal; 
  
public class GFG { 
    public static void main(String[] args) 
    { 
        // BigDecimal object to store the result 
        BigDecimal res; 
  
        // For user input 
        // Use Scanner or BufferedReader 
  
        // Object of String created 
        // Holds the value 
        String input1 
            = "31452678569.24"; 
  
        // Convert the string input to BigDecimal 
        BigDecimal a 
            = new BigDecimal(input1); 
  
        // Scale for BigDecimal 
        int newScale = -1; 
  
        try { 
  
            // Using setScale() method 
            res = a.setScale(newScale, 7); 
  
            // Display the result in BigDecimal 
            System.out.println(res); 
        } 
        catch (Exception e) { 
  
            // Print Exception 
            System.out.println(e); 
        } 
  
        try { 
  
            // Using setScale() method 
            res = a.setScale(newScale, 10); 
  
            // Display the result in BigDecimal 
            System.out.println(res); 
        } 
        catch (Exception e) { 
  
            // Print Exception 
            System.out.println(e); 
        } 
    } 
}
输出:
java.lang.ArithmeticException: Rounding necessary
java.lang.IllegalArgumentException: Invalid rounding mode

setScale(int newScale, RoundingMode roundingMode)

此方法用于计算一个BigDecimal,其小数位数是指定值,其未缩放的值是通过将BigDecimal的未缩放值乘以或除以适当的10的幂来确定其总值来确定的。如果通过操作减小了比例,则必须将未比例的值相除(而不是相乘)。指定的舍入模式将应用于除法。
用法:

public BigDecimal setScale(int newScale, RoundingMode roundingMode)

参数:此方法接受两个参数newScale(用于设置此BigDecimal的比例)和roundingMode类型的roundingMode,以告知要应用的舍入模式。
返回值:此方法返回一个BigDecimal,其小数位数为指定值。
异常:方法抛出算术异常如果roundingMode为UNNECESSARY,并且指定的缩放操作将需要舍入。

下面的程序用于说明BigDecimal的setScale()方法。
示例1:

// Java program to demonstrate 
// setScale() method of BigDecimal 
  
import java.math.*; 
  
public class GFG { 
    public static void main(String[] args) 
    { 
        // BigDecimal object to store the result 
        BigDecimal res; 
  
        // For user input 
        // Use Scanner or BufferedReader 
  
        // Object of String created 
        // Holds the value 
        String input1 
            = "31452678569.24"; 
  
        // Convert the string input to BigDecimal 
        BigDecimal a 
            = new BigDecimal(input1); 
  
        // Scale for BigDecimal 
        int newScale = 1; 
  
        try { 
  
            // Using setScale() method 
            // Using RoundingMode.CEILING 
            res = a.setScale(newScale, RoundingMode.CEILING); 
  
            // Display the result in BigDecimal 
            System.out.println(res); 
        } 
        catch (Exception e) { 
  
            // Print Exception 
            System.out.println(e); 
        } 
    } 
}
输出:
31452678569.3

示例2:该程序显示此方法引发的异常。

// Java program to demonstrate 
// setScale() method of BigDecimal 
  
import java.math.*; 
  
public class GFG { 
    public static void main(String[] args) 
    { 
        // BigDecimal object to store the result 
        BigDecimal res; 
  
        // For user input 
        // Use Scanner or BufferedReader 
  
        // Object of String created 
        // Holds the value 
        String input1 
            = "31452678569.24"; 
  
        // Convert the string input to BigDecimal 
        BigDecimal a 
            = new BigDecimal(input1); 
  
        // Scale for BigDecimal 
        int newScale = -1; 
  
        try { 
  
            // Using setScale() method 
            // Using RoundingMode.UNNECESSARY 
            res = a.setScale(newScale, RoundingMode.UNNECESSARY); 
  
            // Display the result in BigDecimal 
            System.out.println(res); 
        } 
        catch (Exception e) { 
  
            // Print Exception 
            System.out.println(e); 
        } 
    } 
}
输出:
java.lang.ArithmeticException: Rounding necessary

参考文献: https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/math/BigDecimal.html#setScale(int)



相关用法


注:本文由纯净天空筛选整理自Rajnis09大神的英文原创作品 BigDecimal setScale() method in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。