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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。