📜  Java中的 BigDecimal setScale() 方法及示例

📅  最后修改于: 2022-05-13 01:55:06.141000             🧑  作者: Mango

Java中的 BigDecimal setScale() 方法及示例

Java.math.BigDecimal .setScale()用于设置BigDecimal 的比例。此方法对调用此方法的当前 BigDecimal 执行操作。

Java中有三种可用的 setScale() 方法重载,如下所示:

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

注意: setScale(int newScale, int roundingMode)自Java 9 起已弃用

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 并且指定的缩放操作需要舍入,则该方法将引发算术异常。如果 roundingMode 不表示有效的舍入模式,此方法也会引发 IllegalArgumentException。

下面的程序用于说明 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)