概述
Immutable, arbitrary-precision signed decimal numbers. 不可变的、任意精度的 有符号的 十进制数;
A {@code BigDecimal} consists of an arbitrary precision integer <i>unscaled value</i> and a 32-bit integer <i>scale</i>.
If zero or positive, the scale is the number of digits to the right of the decimal point.
If negative, the unscaled value of the number is multiplied by ten to the power of the negation of the scale.
The value of the number represented by the {@code BigDecimal} is therefore <tt>(unscaledValue × 10<sup>-scale</sup>)</tt>.
The {@code BigDecimal} class provides operations for arithmetic, scale manipulation, rounding, comparison, hashing, and format conversion.
The {@link #toString} method provides a canonical representation of a {@code BigDecimal}.
BigDecimal 提供了 算术运算、四舍五入、比较、哈希、格式转换 等操作;
The {@code BigDecimal} class gives its user complete control over rounding behavior.
If no rounding mode is specified and the exact result cannot be represented, an exception is thrown; otherwise, calculations can be carried out to a chosen precision and rounding mode by supplying an appropriate {@link MathContext} object to the operation.
BigDecimal 提供 四舍五入 的操作;
如果 没有设置四舍五入的模式,则无法表示精确的结果,将会抛出异常;
In either case, eight <em>rounding modes</em> are provided for the control of rounding.
Using the integer fields in this class (such as {@link #ROUND_HALF_UP}) to represent rounding mode is largely obsolete; the enumeration values of the {@code RoundingMode} {@code enum}, (such as {@link RoundingMode#HALF_UP}) should be used instead.
提供了8种四舍五入模式:
使用 该类的 RoundingMode#HALF_UP 设置 模式;
...
常用函数
构造方法
- BigDecimal(double val)
- 使用
double
类型的值构造BigDecimal
。 - 注意:由于
double
类型的精度问题,使用此构造方法可能会导致精度损失。
- 使用
- BigDecimal(String val)
- 使用
String
类型的值构造BigDecimal
。 - 这是推荐的构造方法,因为它可以避免
double
类型的精度问题。
- 使用
算术运算
- add(BigDecimal augend)
- 加法。
- subtract(BigDecimal subtrahend)
- 减法。
- multiply(BigDecimal multiplicand)
- 乘法。
- divide(BigDecimal divisor, int scale, int roundingMode)
- 除法,并指定结果的小数位数和舍入模式。
- divide(BigDecimal divisor, RoundingMode roundingMode)
- 除法,并指定舍入模式。
- pow(int n)
- 求幂。
- negate()
- 取反。
- abs()
- 取绝对值。
标度操作
- setScale(int newScale, RoundingMode roundingMode)
- 设置标度(小数点后的位数),并指定舍入模式。
- setScale(int newScale, int roundingMode)
- 设置标度,并指定旧的舍入模式常量(现已过时,建议使用
RoundingMode
)。
- 设置标度,并指定旧的舍入模式常量(现已过时,建议使用
- setScale(int newScale)
- 设置标度,使用默认的舍入模式(
RoundingMode.HALF_UP
)。
- 设置标度,使用默认的舍入模式(
示例
import java.math.BigDecimal; import java.math.RoundingMode; public class BigDecimalScaleExample { public static void main(String[] args) { // 创建一个 BigDecimal 对象 BigDecimal bigDecimal = new BigDecimal("123.456789"); // 设置标度为 2,使用四舍五入模式 BigDecimal rounded = bigDecimal.setScale(2, RoundingMode.HALF_UP); System.out.println("Rounded to 2 decimal places: " + rounded); // 输出: Rounded to 2 decimal places: 123.46 // 设置标度为 4,使用向下舍入模式 BigDecimal truncated = bigDecimal.setScale(4, RoundingMode.DOWN); System.out.println("Truncated to 4 decimal places: " + truncated); // 输出: Truncated to 4 decimal places: 123.4567 // 设置标度为 0,使用向零舍入模式 BigDecimal roundedToZero = bigDecimal.setScale(0, RoundingMode.TOWARDS_ZERO); System.out.println("Rounded to 0 decimal places towards zero: " + roundedToZero); // 输出: Rounded to 0 decimal places towards zero: 123 // 设置标度为 2,使用向上舍入模式 BigDecimal roundedUp = bigDecimal.setScale(2, RoundingMode.UP); System.out.println("Rounded to 2 decimal places up: " + roundedUp); // 输出: Rounded to 2 decimal places up: 123.46 // 设置标度为 3,使用向正无穷大舍入模式 BigDecimal roundedCeiling = bigDecimal.setScale(3, RoundingMode.CEILING); System.out.println("Rounded to 3 decimal places ceiling: " + roundedCeiling); // 输出: Rounded to 3 decimal places ceiling: 123.457 // 设置标度为 3,使用向负无穷大舍入模式 BigDecimal roundedFloor = new BigDecimal("-123.456789").setScale(3, RoundingMode.FLOOR); System.out.println("Rounded to 3 decimal places floor: " + roundedFloor); // 输出: Rounded to 3 decimal places floor: -123.457 } }
比较
- compareTo(BigDecimal val)
- 比较两个
BigDecimal
对象的大小。
- 比较两个
- equals(Object x)
- 判断两个
BigDecimal
对象是否相等。
- 判断两个
舍入
- round(MathContext mc)
- 根据指定的
MathContext
进行舍入。
- 根据指定的
- round(RoundingMode roundingMode)
- 根据指定的舍入模式进行舍入。
格式化
- toPlainString()
- 将
BigDecimal
转换为不包含科学记数法的字符串。
- 将
- toString()
- 将
BigDecimal
转换为字符串,可能使用科学记数法。
- 将
- stripTrailingZeros()
- 返回一个新的
BigDecimal
,它是通过移除此BigDecimal
的任何尾随零得到的。
- 返回一个新的
其他
- doubleValue()
- 将
BigDecimal
转换为double
(可能导致精度损失)。
- 将
- floatValue()
- 将
BigDecimal
转换为float
(可能导致精度损失)。
- 将
- longValue()
- 将
BigDecimal
转换为long
(如果值太大或太小,则抛出异常)。
- 将
- intValue()
- 将
BigDecimal
转换为int
(如果值太大或太小,则抛出异常)。
- 将
- hashCode()
- 返回
BigDecimal
的哈希码。
- 返回
标签:舍入,Rounded,BigDecimal,places,decimal,RoundingMode From: https://www.cnblogs.com/anpeiyong/p/18099721