當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。