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)
相關用法
- Java BigDecimal pow()用法及代碼示例
- Java BigDecimal add()用法及代碼示例
- Java BigDecimal divideAndRemainder()用法及代碼示例
- Java BigDecimal remainder()用法及代碼示例
- Java BigDecimal sqrt()用法及代碼示例
- Java BigDecimal divideToIntegralValue()用法及代碼示例
- Java BigDecimal toEngineeringString()用法及代碼示例
- Java BigDecimal toPlainString()用法及代碼示例
- Java BigDecimal floatValue()用法及代碼示例
- Java BigDecimal divide()用法及代碼示例
- Java BigDecimal toString()用法及代碼示例
- Java BigDecimal subtract()用法及代碼示例
- Java BigDecimal plus()用法及代碼示例
- Java BigDecimal max()用法及代碼示例
- Java BigDecimal min()用法及代碼示例
注:本文由純淨天空篩選整理自Rajnis09大神的英文原創作品 BigDecimal setScale() method in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。