|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.lang.Number java.math.BigDecimal
public class BigDecimal
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString()
方法提供 BigDecimal 的规范表示形式。
BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext
对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP
)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP
)的枚举值。
当为 MathContext 对象提供 0 的精度设置(例如,MathContext.UNLIMITED
)时,算术运算是准确的,它们是不采用任何 MathContext 对象的算术方法。(这是第 5 版之前的版本支持的唯一行为。)为了计算准确结果,不使用附带 0 精度设置的 MathContext 对象的舍入模式设置,因此与该对象无关。在除法中,准确的商可能是一个无限长的十进制扩展;例如,1 除以 3 所得的商。如果商具有无穷的十进制扩展,但是指定了该操作返回准确结果,则抛出 ArithmeticException。否则,像其他操作那样,返回除法运算的准确结果。
当精度设置不为 0 时,BigDecimal 算法的规则完全符合 ANSI X3.274-1996 和 ANSI X3.274-1996/AM 1-2000( 7.4 节)中定义的算法的可选操作模式。与上述标准不同,BigDecimal 包括多种舍入模式,它们对于版本 5 以前的 BigDecimal 版本中的除法是强制性的。这些 ANSI 标准和 BigDecimal 规范之间的任何冲突都按照有利于 BigDecimal 的方式进行解决。
由于同一数值可以有不同的表示形式(具有不同的标度),因此运算和舍入的规则必须同时指定数值结果和结果表示形式中所用的标度。
一般情况下,当准确结果(在除法中,可能有无限多位)比返回的数值具有更多位数时,舍入模式和精度设置确定操作如何返回具有有限位数的结果。 首先,MathContext 的 precision 设置指定要返回的总位数;这确定了结果的精度。位数计数从准确结果的最左边的非零数字开始。舍入模式确定丢弃的尾部位数如何影响返回的结果。
对于所有算术运算符,运算的执行方式是,首先计算准确的中间结果,然后,使用选择的舍入模式将其舍入为精度设置(如有必要)指定的位数。如果不返回准确结果,则将丢弃准确结果的某些数位。当舍入增加了返回结果的大小时,前导数字“9”的进位传播可能会创建新的数位。例如,将值 999.9 舍入为三位数字,则在数值上等于一千,表示为 100×101。在这种情况下,新的 "1" 是返回结果的前导数位。
除了逻辑的准确结果外,每种算术运算都有一个表示结果的首选标度。下表列出了每个运算的首选标度。
运算 | 结果的首选标度 |
---|---|
加 | max(addend.scale(), augend.scale()) |
减 | max(minuend.scale(), subtrahend.scale()) |
乘 | multiplier.scale() + multiplicand.scale() |
除 | dividend.scale() - divisor.scale() |
舍入之前,逻辑的准确中间结果的标度是该运算的首选标度。如果用 precision
位数无法表示准确的数值结果,则舍入会选择要返回的一组数字,并将该结果的标度从中间结果的标度减小到可以表示实际返回的 precision
位数的最小标度。如果准确结果可以使用最多 precision
个数字表示,则返回具有最接近首选标度的标度的结果表示形式。尤其是,通过移除结尾零并减少标度,可以用少于 precision
个数字来表示准确的可表示的商。例如,使用 floor 舍入模式将结果舍入为三个数字,
19/100 = 0.19 // integer=19, scale=2
但是
21/110 = 0.190 // integer=190, scale=3
注意,对于加、减和乘,标度的缩减量将等于丢弃的准确结果的数字位置数。如果舍入导致进位传播创建一个新的高位,则当未创建新的数位时,会丢弃该结果的附加数字。
其他方法可能与舍入语义稍微不同。例如,使用指定的算法的 pow 方法得到的结果可能偶尔不同于舍入得到的算术结果,如最后一位有多个单位(ulp)。
可以通过两种类型的操作来处理 BigDecimal 的标度:标度/舍入操作和小数点移动操作。标度/舍入操作(setScale
和 round
)返回 BigDecimal,其值近似地(或精确地)等于操作数的值,但是其标度或精度是指定的值;即:它们会增加或减少对其值具有最小影响的存储数的精度。小数点移动操作(movePointLeft
和 movePointRight
)返回从操作数创建的 BigDecimal,创建的方法是按指定方向将小数点移动一个指定距离。
为了简洁明了起见,整个 BigDecimal 方法的描述中都使用了伪代码。伪代码表达式 (i + j) 是“其值为 BigDecimal i 加 BigDecimal j 的 BigDecimal”的简写。伪代码表达式 (i == j) 是“当且仅当 BigDecimal i 表示与 BigDecimal j 相同的值时,则为 true”的简写。可以类似地解释其他伪代码表达式。方括号用于表示特定的 BigInteger 和定义 BigDecimal 值的标度对;例如,[19, 2] 表示 BigDecimal 在数值上等于 0.19,标度是 2。
注:如果 BigDecimal 对象用作 SortedMap
中的键或 SortedSet
中的元素,则应特别小心,因为 BigDecimal 的自然排序与 equals 方法不一致。有关更多信息,请参见 Comparable
、SortedMap
或 SortedSet
。
当为任何输入参数传递 null 对象引用时,此类的所有方法和构造方法都将抛出 NullPointerException。
BigInteger
,
MathContext
,
RoundingMode
,
SortedMap
,
SortedSet
,
序列化表格字段摘要 | |
---|---|
static BigDecimal |
ONE
值为 1,标度为 0。 |
static int |
ROUND_CEILING
接近正无穷大的舍入模式。 |
static int |
ROUND_DOWN
接近零的舍入模式。 |
static int |
ROUND_FLOOR
接近负无穷大的舍入模式。 |
static int |
ROUND_HALF_DOWN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 |
static int |
ROUND_HALF_EVEN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。 |
static int |
ROUND_HALF_UP
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。 |
static int |
ROUND_UNNECESSARY
断言请求的操作具有精确的结果,因此不需要舍入。 |
static int |
ROUND_UP
舍入远离零的舍入模式。 |
static BigDecimal |
TEN
值为 10,标度为 0。 |
static BigDecimal |
ZERO
值为 0,标度为 0。 |
构造方法摘要 | |
---|---|
BigDecimal(BigInteger val)
将 BigInteger 转换为 BigDecimal。 |
|
BigDecimal(BigInteger unscaledVal,
int scale)
将 BigInteger 非标度值和 int 标度转换为 BigDecimal。 |
|
BigDecimal(BigInteger unscaledVal,
int scale,
MathContext mc)
将 BigInteger 非标度值和 int 标度转换为 BigDecimal(根据上下文设置进行舍入)。 |
|
BigDecimal(BigInteger val,
MathContext mc)
将 BigInteger 转换为 BigDecimal(根据上下文设置进行舍入)。 |
|
BigDecimal(char[] in)
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列。 |
|
BigDecimal(char[] in,
int offset,
int len)
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列,同时允许指定子数组。 |
|
BigDecimal(char[] in,
int offset,
int len,
MathContext mc)
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列,同时允许指定子数组,并根据上下文设置进行舍入。 |
|
BigDecimal(char[] in,
MathContext mc)
将 BigDecimal 的字符数组表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符序列(根据上下文设置进行舍入)。 |
|
BigDecimal(double val)
将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。 |
|
BigDecimal(double val,
MathContext mc)
将 double 转换为 BigDecimal(根据上下文设置进行舍入)。 |
|
BigDecimal(int val)
将 int 转换为 BigDecimal。 |
|
BigDecimal(int val,
MathContext mc)
将 int 转换为 BigDecimal(根据上下文设置进行舍入)。 |
|
BigDecimal(long val)
将 long 转换为 BigDecimal。 |
|
BigDecimal(long val,
MathContext mc)
将 long 转换为 BigDecimal(根据上下文设置进行舍入)。 |
|
BigDecimal(String val)
将 BigDecimal 的字符串表示形式转换为 BigDecimal。 |
|
BigDecimal(String val,
MathContext mc)
将 BigDecimal 的字符串表示形式转换为 BigDecimal,接受与 BigDecimal(String) 构造方法相同的字符串(按照上下文设置进行舍入)。 |
方法摘要 | |
---|---|
BigDecimal |
abs()
返回 BigDecimal,其值为此 BigDecimal 的绝对值,其标度为 this.scale()。 |
BigDecimal |
abs(MathContext mc)
返回其值为此 BigDecimal 绝对值的 BigDecimal(根据上下文设置进行舍入)。 |
BigDecimal |
add(BigDecimal augend)
返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。 |
BigDecimal |
add(BigDecimal augend,
MathContext mc)
返回其值为 (this + augend) 的 BigDecimal(根据上下文设置进行舍入)。 |
byte |
byteValueExact()
将此 BigDecimal 转换为 byte,以检查丢失的信息。 |
int |
compareTo(BigDecimal val)
将此 BigDecimal 与指定的 BigDecimal 比较。 |
BigDecimal |
divide(BigDecimal divisor)
返回一个 BigDecimal,其值为 (this / divisor),其首选标度为 (this.scale() - divisor.scale());如果无法表示准确的商值(因为它有无穷的十进制扩展),则抛出 ArithmeticException。 |
BigDecimal |
divide(BigDecimal divisor,
int roundingMode)
返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。 |
BigDecimal |
divide(BigDecimal divisor,
int scale,
int roundingMode)
返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。 |
BigDecimal |
divide(BigDecimal divisor,
int scale,
RoundingMode roundingMode)
返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。 |
BigDecimal |
divide(BigDecimal divisor,
MathContext mc)
返回其值为 (this / divisor) 的 BigDecimal(根据上下文设置进行舍入)。 |
BigDecimal |
divide(BigDecimal divisor,
RoundingMode roundingMode)
返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor)
返回由两个元素组成的 BigDecimal 数组,该数组包含 divideToIntegralValue 的结果,后跟对两个操作数计算所得到的 remainder。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor,
MathContext mc)
返回由两个元素组成的 BigDecimal 数组,该数组包含 divideToIntegralValue 的结果,后跟根据上下文设置对两个操作数进行舍入计算所得到的 remainder 的结果。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor)
返回 BigDecimal,其值为向下舍入所得商值 (this / divisor) 的整数部分。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor,
MathContext mc)
返回 BigDecimal,其值为 (this / divisor) 的整数部分。 |
double |
doubleValue()
将此 BigDecimal 转换为 double。 |
boolean |
equals(Object x)
比较此 BigDecimal 与指定的 Object 的相等性。 |
float |
floatValue()
将此 BigDecimal 转换为 float。 |
int |
hashCode()
返回此 BigDecimal 的哈希码。 |
int |
intValue()
将此 BigDecimal 转换为 int。 |
int |
intValueExact()
将此 BigDecimal 转换为 int,以检查丢失的信息。 |
long |
longValue()
将此 BigDecimal 转换为 long。 |
long |
longValueExact()
将此 BigDecimal 转换为 long,以检查丢失的信息。 |
BigDecimal |
max(BigDecimal val)
返回此 BigDecimal 和 val 的最大值。 |
BigDecimal |
min(BigDecimal val)
返回此 BigDecimal 和 val 的最小值。 |
BigDecimal |
movePointLeft(int n)
返回一个 BigDecimal,它等效于将该值的小数点向左移动 n 位。 |
BigDecimal |
movePointRight(int n)
返回一个 BigDecimal,它等效于将该值的小数点向右移动 n 位。 |
BigDecimal |
multiply(BigDecimal multiplicand)
返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。 |
BigDecimal |
multiply(BigDecimal multiplicand,
MathContext mc)
返回其值为 (this × multiplicand) 的 BigDecimal(根据上下文设置进行舍入)。 |
BigDecimal |
negate()
返回 BigDecimal,其值为 (-this),其标度为 this.scale()。 |
BigDecimal |
negate(MathContext mc)
返回其值为 (-this) 的 BigDecimal(根据上下文设置进行舍入)。 |
BigDecimal |
plus()
返回 BigDecimal,其值为 (+this),其标度为 this.scale()。 |
BigDecimal |
plus(MathContext mc)
返回其值为 (+this) 的 BigDecimal(根据上下文设置进行舍入)。 |
BigDecimal |
pow(int n)
返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。 |
BigDecimal |
pow(int n,
MathContext mc)
返回其值为 (thisn) 的 BigDecimal。 |
int |
precision()
返回此 BigDecimal 的精度。 |
BigDecimal |
remainder(BigDecimal divisor)
返回其值为 (this % divisor) 的 BigDecimal。 |
BigDecimal |
remainder(BigDecimal divisor,
MathContext mc)
返回其值为 (this % divisor) 的 BigDecimal(根据上下文设置进行舍入)。 |
BigDecimal |
round(MathContext mc)
返回根据 MathContext 设置进行舍入后的 BigDecimal。 |
int |
scale()
返回此 BigDecimal 的标度。 |
BigDecimal |
scaleByPowerOfTen(int n)
返回其数值等于 (this * 10n) 的 BigDecimal。 |
BigDecimal |
setScale(int newScale)
返回一个 BigDecimal,其标度为指定值,其值在数值上等于此 BigDecimal 的值。 |
BigDecimal |
setScale(int newScale,
int roundingMode)
返回一个 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。 |
BigDecimal |
setScale(int newScale,
RoundingMode roundingMode)
返回 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。 |
short |
shortValueExact()
将此 BigDecimal 转换为 short,以检查丢失的信息。 |
int |
signum()
返回此 BigDecimal 的正负号函数。 |
BigDecimal |
stripTrailingZeros()
返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。 |
BigDecimal |
subtract(BigDecimal subtrahend)
返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。 |
BigDecimal |
subtract(BigDecimal subtrahend,
MathContext mc)
返回其值为 (this - subtrahend) 的 BigDecimal(根据上下文设置进行舍入)。 |
BigInteger |
toBigInteger()
将此 BigDecimal 转换为 BigInteger。 |
BigInteger |
toBigIntegerExact()
将此 BigDecimal 转换为 BigInteger,以检查丢失的信息。 |
String |
toEngineeringString()
返回此 BigDecimal 的字符串表示形式,需要指数时,则使用工程计数法。 |
String |
toPlainString()
返回不带指数字段的此 BigDecimal 的字符串表示形式。 |
String |
toString()
返回此 BigDecimal 的字符串表示形式,如果需要指数,则使用科学记数法。 |
BigDecimal |
ulp()
返回此 BigDecimal 的 ulp(最后一位的单位)的大小。 |
BigInteger |
unscaledValue()
返回其值为此 BigDecimal 的非标度值 的 BigInteger。 |
static BigDecimal |
valueOf(double val)
使用 Double.toString(double) 方法提供的 double 规范的字符串表示形式将 double 转换为 BigDecimal。 |
static BigDecimal |
valueOf(long val)
将 long 值转换为具有零标度的 BigDecimal。 |
static BigDecimal |
valueOf(long unscaledVal,
int scale)
将 long 非标度值和 int 标度转换为 BigDecimal。 |
从类 java.lang.Number 继承的方法 |
---|
byteValue, shortValue |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final BigDecimal ZERO
public static final BigDecimal ONE
public static final BigDecimal TEN
public static final int ROUND_UP
public static final int ROUND_DOWN
public static final int ROUND_CEILING
public static final int ROUND_FLOOR
public static final int ROUND_HALF_UP
public static final int ROUND_HALF_DOWN
public static final int ROUND_HALF_EVEN
public static final int ROUND_UNNECESSARY
构造方法详细信息 |
---|
public BigDecimal(char[] in, int offset, int len)
BigDecimal(String)
构造方法相同的字符序列,同时允许指定子数组。
注意,如果字符数组中已经提供字符的序列,则使用此构造方法要比将 char 数组转换为字符串并使用 BigDecimal(String) 构造方法更快。
in
- 作为源字符的 char 数组。offset
- 要检查的数组中的第一个字符。len
- 要考虑的字符数。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式,或者定义的子数组不完全在 in 中。public BigDecimal(char[] in, int offset, int len, MathContext mc)
BigDecimal(String)
构造方法相同的字符序列,同时允许指定子数组,并根据上下文设置进行舍入。
注意,如果字符数组中已经提供字符的序列,则使用此构造方法要比将 char 数组转换为字符串并使用 BigDecimal(String) 构造方法更快。
in
- 作为源字符的 char 数组。offset
- 要检查的数组中的第一个字符。len
- 要考虑的字符数。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,且舍入模式为 UNNECESSARY。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式,或者定义的子数组不完全在 in 中。public BigDecimal(char[] in)
BigDecimal(String)
构造方法相同的字符序列。
注意,如果字符序列已经可以作为一个字符数组使用,则使用此构造方法要比将 char 数组转换为字符串并使用 BigDecimal(String) 构造方法更快。
in
- 作为源字符的 char 数组。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式。public BigDecimal(char[] in, MathContext mc)
BigDecimal(String)
构造方法相同的字符序列(根据上下文设置进行舍入)。
注意,如果字符序列已经可以作为一个字符数组使用,则使用此构造方法要比将 char 数组转换为字符串并使用 BigDecimal(String) 构造方法更快。
in
- 作为源字符的 char 数组。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,且舍入模式为 UNNECESSARY。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式。public BigDecimal(String val)
该小数由小数点以及后跟的零或更多十进制数字组成。字符串必须至少包含整数或小数部分中的一个数字。由符号、整数和小数部分组成的数字称为有效位数。
指数由字符 'e'('\u0065') 或 'E' ('\u0045') 以及后跟的一个或多个十进制数字组成。指数的值必须位于 Integer.MAX_VALUE
(Integer.MIN_VALUE
+1) 和 Integer.MAX_VALUE
(包括)之间。
更正式地说,以下语法描述了此构造方法接受的字符串:
- BigDecimalString:
- Signopt Significand Exponentopt
- Sign:
- +
- -
- Significand:
- IntegerPart .FractionPartopt
- . FractionPart
- IntegerPart
- IntegerPart:
- Digits
- FractionPart:
- Digits
- Exponent:
- ExponentIndicator SignedInteger
- ExponentIndicator:
- e
- E
- SignedInteger:
- Signopt Digits
- Digits:
- Digit
- Digits Digit
- Digit:
Character.isDigit(char)
对其返回 true 的任何字符,如 0、1、2……
返回的 BigDecimal 的标度将是小数部分中的数字位数,如果该字符串不包含小数点,则标度为零,这取决于对指数的调整;如果字符串包含一个指数,则从标度减去该指数。得到的标度值必须位于 Integer.MIN_VALUE 和 Integer.MAX_VALUE(包括)之间。
Character.digit(char, int)
集提供从字符到数字的映射,以转换成基数 10。该字符串不能包含任何额外字符(例如,空白)。
示例:
返回的 BigDecimal 的值等于有效位数 × 10 指数。对于左边的每个字符串,得到的表示形式 [BigInteger, scale] 显示在右边。
"0" [0,0] "0.00" [0,2] "123" [123,0] "-123" [-123,0] "1.23E3" [123,-1] "1.23E+3" [123,-1] "12.3E+7" [123,-6] "12.0" [120,1] "12.3" [123,1] "0.00123" [123,5] "-1.23E-12" [-123,14] "1234.5E-4" [12345,5] "0E+7" [0,-7] "-0" [0,0]
注:对于不是 float、double NaN 和 ±Infinity 的值,此构造方法与 Float.toString(float)
和 Double.toString(double)
返回的值兼容。这通常是将 float 或 double 转换为 BigDecimal 的首选方法,因为它不会遇到 BigDecimal(double)
构造方法的不可预知问题。
val
- BigDecimal 的字符串表示形式。
NumberFormatException
- 如果 val 不是 BigDecimal 的有效表示形式。public BigDecimal(String val, MathContext mc)
BigDecimal(String)
构造方法相同的字符串(按照上下文设置进行舍入)。
val
- BigDecimal 的字符串表示形式。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,且舍入模式为 UNNECESSARY。
NumberFormatException
- 如果 val 不是 BigDecimal 的有效表示形式。public BigDecimal(double val)
注:
Double.toString(double)
方法,然后使用 BigDecimal(String)
构造方法,将 double 转换为 String。要获取该结果,请使用 static valueOf(double)
方法。
val
- 要转换为 BigDecimal 的 double 值。
NumberFormatException
- 如果 val 为无穷大或 NaN。public BigDecimal(double val, MathContext mc)
此构造方法的结果有一定的不可预知性,通常不建议使用它,请参见 BigDecimal(double)
构造方法下面的注释。
val
- 要转换为 BigDecimal 的 double 值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是 RoundingMode 为 UNNECESSARY。
NumberFormatException
- 如果 val 为无穷大或 NaN。public BigDecimal(BigInteger val)
val
- 要转换为 BigDecimal 的 BigInteger 值。public BigDecimal(BigInteger val, MathContext mc)
val
- 要转换为 BigDecimal 的 BigInteger 值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal(BigInteger unscaledVal, int scale)
unscaledVal
- BigDecimal 的非标度值。scale
- BigDecimal 的标度。public BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
unscaledVal
- BigDecimal 的非标度值。scale
- BigDecimal 的标度。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal(int val)
val
- 要转换为 BigDecimal 的 int 值。public BigDecimal(int val, MathContext mc)
val
- 要转换为 BigDecimal 的 int 值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal(long val)
val
- 要转换为 BigDecimal 的 long 值。public BigDecimal(long val, MathContext mc)
val
- 要转换为 BigDecimal 的 long 值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。方法详细信息 |
---|
public static BigDecimal valueOf(long unscaledVal, int scale)
unscaledVal
- BigDecimal 的非标度值。scale
- BigDecimal 的标度。
public static BigDecimal valueOf(long val)
val
- BigDecimal 的值。
public static BigDecimal valueOf(double val)
Double.toString(double)
方法提供的 double 规范的字符串表示形式将 double 转换为 BigDecimal。
注:这通常是将 double(或 float)转化为 BigDecimal 的首选方法,因为返回的值等于从构造 BigDecimal(使用 Double.toString(double)
得到的结果)得到的值。
val
- 要转换为 BigDecimal 的 double。
NumberFormatException
- 如果 val 为无穷大或 NaN。public BigDecimal add(BigDecimal augend)
augend
- 将添加到此 BigDecimal 中的值。
public BigDecimal add(BigDecimal augend, MathContext mc)
augend
- 将添加到此 BigDecimal 中的值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal subtract(BigDecimal subtrahend)
subtrahend
- 从此 BigDecimal 减去的值。
public BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
subtrahend
- 从此 BigDecimal 减去的值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal multiply(BigDecimal multiplicand)
multiplicand
- 乘以此 BigDecimal 的值。
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
multiplicand
- 乘以此 BigDecimal 的值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
相对于此遗留方法,应优先使用新的 divide(BigDecimal, int, RoundingMode)
方法。
divisor
- 此 BigDecimal 要除以的值。scale
- 要返回的 BigDecimal 商的标度。roundingMode
- 要应用的舍入模式。
ArithmeticException
- 如果 divisor 为零,则 roundingMode==ROUND_UNNECESSARY 和指定的标度不足以准确地表示相除的结果。
IllegalArgumentException
- 如果 roundingMode 不表示一个有效的舍入模式。ROUND_UP
,
ROUND_DOWN
,
ROUND_CEILING
,
ROUND_FLOOR
,
ROUND_HALF_UP
,
ROUND_HALF_DOWN
,
ROUND_HALF_EVEN
,
ROUND_UNNECESSARY
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
divisor
- 此 BigDecimal 要除以的值。scale
- 要返回的 BigDecimal 商的标度。roundingMode
- 要应用的舍入模式。
ArithmeticException
- 如果 divisor 为零,则 roundingMode==RoundingMode.UNNECESSARY 和指定的标度不足以准确地表示相除的结果。public BigDecimal divide(BigDecimal divisor, int roundingMode)
相对于此遗留方法,应优先使用新的 divide(BigDecimal, RoundingMode)
方法。
divisor
- 此 BigDecimal 要除以的值。roundingMode
- 要应用的舍入模式。
ArithmeticException
- 如果 divisor==0 或者 roundingMode==ROUND_UNNECESSARY 和 this.scale() 不足以准确地表示相除的结果。
IllegalArgumentException
- 如果 roundingMode 不表示一个有效的舍入模式。ROUND_UP
,
ROUND_DOWN
,
ROUND_CEILING
,
ROUND_FLOOR
,
ROUND_HALF_UP
,
ROUND_HALF_DOWN
,
ROUND_HALF_EVEN
,
ROUND_UNNECESSARY
public BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
divisor
- 此 BigDecimal 要除以的值。roundingMode
- 要应用的舍入模式。
ArithmeticException
- 如果 divisor==0 或者 roundingMode==RoundingMode.UNNECESSARY 和 this.scale() 不足以准确地表示相除的结果。public BigDecimal divide(BigDecimal divisor)
divisor
- 此 BigDecimal 要相除的值。
ArithmeticException
- 如果准确的商值没有无穷的十进制扩展public BigDecimal divide(BigDecimal divisor, MathContext mc)
divisor
- 此 BigDecimal 要除以的值。mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY 或 mc.precision == 0,并且商值具有无穷的十进制扩展。public BigDecimal divideToIntegralValue(BigDecimal divisor)
(this.scale() - divisor.scale())
。
divisor
- 此 BigDecimal 要除以的值。
ArithmeticException
- 如果 divisor==0public BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
(this.scale() - divisor.scale())
。如果准确商值的整数部分需要的位数多于 mc.precision,则抛出 ArithmeticException。
divisor
- 此 BigDecimal 要相除的值。mc
- 要使用的上下文。
ArithmeticException
- 如果 divisor==0
ArithmeticException
- 如果 mc.precision > 0,并且该结果需要的精度大于 mc.precision。public BigDecimal remainder(BigDecimal divisor)
余数由 this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) 给出。注意,这不是模操作(结果可以为负)。
divisor
- 此 BigDecimal 要除以的值。
ArithmeticException
- 如果 divisor==0public BigDecimal remainder(BigDecimal divisor, MathContext mc)
余数由 this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor)) 给出。注意,这不是模操作(结果可以为负)。
divisor
- 此 BigDecimal 要相除的值。mc
- 要使用的上下文。
ArithmeticException
- 如果 divisor==0
ArithmeticException
- 如果结果不准确,但舍入模式为 UNNECESSARY,或者 mc.precision > 0,并且 this.divideToIntgralValue(divisor) 的结果要求的精度大于 mc.precision。divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
public BigDecimal[] divideAndRemainder(BigDecimal divisor)
注意,如果同时需要整数商和余数,则此方法比分别使用 divideToIntegralValue 和 remainder 方法更快速,因为相除仅需执行一次。
divisor
- 此 BigDecimal 要相除的值和计算的余数。
ArithmeticException
- 如果 divisor==0divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
,
remainder(java.math.BigDecimal, java.math.MathContext)
public BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
注意,如果同时需要整数商和余数,则此方法比分别使用 divideToIntegralValue 和 remainder 方法更快速,因为相除仅需执行一次。
divisor
- 此 BigDecimal 要相除的值和计算的余数。mc
- 要使用的上下文。
ArithmeticException
- 如果 divisor==0
ArithmeticException
- 如果结果不准确,但舍入模式为 UNNECESSARY,或者 mc.precision > 0,并且 this.divideToIntgralValue(divisor) 的结果要求的精度大于 mc.precision。divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
,
remainder(java.math.BigDecimal, java.math.MathContext)
public BigDecimal pow(int n)
参数 n 必须在 0 到 999999999(包括)之间。ZERO.pow(0) 返回 ONE
。
注意,未来版本可能会扩展此方法允许的指数范围。
n
- 此 BigDecimal 的幂。
ArithmeticException
- 如果 n 超出范围。public BigDecimal pow(int n, MathContext mc)
X3.274-1996 算法为:
ONE
(即使 this 为零),否则
n
- 此 BigDecimal 的幂。mc
- 要使用的上下文。
ArithmeticException
- 如果该结果不准确,但是舍入模式为 UNNECESSARY,或者 n 超出范围。public BigDecimal abs()
public BigDecimal abs(MathContext mc)
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal negate()
public BigDecimal negate(MathContext mc)
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。public BigDecimal plus()
此方法仅返回此 BigDecimal,该方法与一元减方法 negate()
对称。
negate()
public BigDecimal plus(MathContext mc)
此方法的效果与 round(MathContext)
方法的效果相同。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不准确,但是舍入模式为 UNNECESSARY。round(MathContext)
public int signum()
public int scale()
public int precision()
零值的精度是 1。
public BigInteger unscaledValue()
public BigDecimal round(MathContext mc)
此方法的效果与 plus(MathContext)
方法的效果相同。
mc
- 要使用的上下文。
ArithmeticException
- 如果舍入模式为 UNNECESSARY,并且 BigDecimal 操作要求进行舍入。plus(MathContext)
public BigDecimal setScale(int newScale, RoundingMode roundingMode)
newScale
- 要返回的 BigDecimal 值的标度。roundingMode
- 要应用的舍入模式。
ArithmeticException
- 如果 roundingMode==UNNECESSARY,并且指定的标度操作要求进行舍入。RoundingMode
public BigDecimal setScale(int newScale, int roundingMode)
注意,由于 BigDecimal 对象是不可变的,此方法的调用不会 导致初始对象被修改,这与使用名为 setX 变异字段 X 方法的常规约定相反。相反,setScale 返回具有适当标度的对象;返回的对象不一定是新分配的。
相对于此遗留方法,应优先使用新的 setScale(int, RoundingMode)
方法。
newScale
- 要返回的 BigDecimal 值的标度。roundingMode
- 要应用的舍入模式。
ArithmeticException
- 如果 roundingMode==ROUND_UNNECESSARY,并且指定的标度操作要求进行舍入。
IllegalArgumentException
- 如果 roundingMode 不表示一个有效的舍入模式。ROUND_UP
,
ROUND_DOWN
,
ROUND_CEILING
,
ROUND_FLOOR
,
ROUND_HALF_UP
,
ROUND_HALF_DOWN
,
ROUND_HALF_EVEN
,
ROUND_UNNECESSARY
public BigDecimal setScale(int newScale)
此调用通常用于增加标度,在这种情况下,可以保证存在指定标度和正确值的 BigDecimal。如果调用方知道 BigDecimal在其小数部分的结尾有足够多的零(即其整数值中的十的因子),则该调用也可用于减少标度,以允许重新标度,而不更改其值。
此方法返回与 setScale 的两个参数版本相同的结果,但是,为调用方省去了指定舍入模式的麻烦(舍入模式不影响结果)。
注意,由于 BigDecimal 对象是不可变的,因此此方法的调用不会 导致初始对象被修改,这与使用名为 setX 变异字段 X 方法的常规约定相反。相反,setScale 返回具有适当标度的对象;返回的对象不一定是新分配的。
newScale
- 要返回的 BigDecimal 值的标度。
ArithmeticException
- 如果指定的标度操作要求进行舍入。setScale(int, int)
,
setScale(int, RoundingMode)
public BigDecimal movePointLeft(int n)
n
- 将小数点向左移动的位数。
ArithmeticException
- 如果标度溢出。public BigDecimal movePointRight(int n)
n
- 将小数点向右移动的位数。
ArithmeticException
- 如果标度溢出。public BigDecimal scaleByPowerOfTen(int n)
ArithmeticException
- 如果该标度的范围超出 32 位整数的范围。public BigDecimal stripTrailingZeros()
public int compareTo(BigDecimal val)
Comparable<BigDecimal>
中的 compareTo
val
- 将此 BigDecimal 与之比较的 BigDecimal。
public boolean equals(Object x)
compareTo
不同,仅当两个 BigDecimal 对象的值和标度都相等时,此方法才认为它们相等(因此通过此方法进行比较时,2.0 不等于 2.00)。
Object
中的 equals
x
- 将与此 BigDecimal 进行比较的 Object。
compareTo(java.math.BigDecimal)
,
hashCode()
public BigDecimal min(BigDecimal val)
val
- 要计算最小值的值。
compareTo
方法的定义,如果它们相等,则返回 this。compareTo(java.math.BigDecimal)
public BigDecimal max(BigDecimal val)
val
- 要计算最大值的值。
compareTo
方法的定义,如果它们相等,则返回 this。compareTo(java.math.BigDecimal)
public int hashCode()
Object
中的 hashCode
equals(Object)
public String toString()
根据以下步骤可创建 BigDecimal 的标准的规范化字符串形式:首先,使用不带前导零的字符 '0' 至 '9'(如果其值为零,则使用单个 '0' 字符)将 BigDecimal 的非标度值的绝对值转换为以十为基数的字符串。
其次,计算调整的指数;这是无效的标度,加上转换的非标度值中的字符数减 1。即:-scale+(ulength-1),其中 ulength 是十进制数字中非标度值的绝对值的长度(其精度)。
如果该标度大于或等于零,并且调整的指数大于或等于 -6,则在不使用指数记数法的情况下将该数转换为字符形式。在这种情况下,如果标度为零,则不添加小数点,如果标度为正数,则插入小数点,且标度指定了小数点右边的字符个数。必要时,将字符 '0' 添加到转换的非标度值的左边。如果插入后小数点前面没有字符,则以传统字符 '0' 为前缀。
否则(即:如果标度为负数,或者调整的指数小于 -6),使用指数记数法将该数转换为字符形式。在这种情况下,如果转换后的 BigInteger 多于一位数,则小数点插入在第一个数字之后。然后,将字符形式的指数作为转换的非标度值(也许具有插入的小数点)的后缀;这包含字母 'E' 和直接跟在其后的转换为字符形式的调整指数。后者的基数为十,使用的字符是 '0' 到 '9',没有前导零,并且,如果调整的指数为负数,则总是以符号字符 '-' ('\u002D') 为前缀,否则以 '+' ('\u002B') 为前缀。
最后,如果非标度值小于零,则整个字符串以减号 '-' ('\u002D') 为前缀。如果非标度值为零或正数,则不使用符号字符作为前缀。
示例:
对于左边的每个表示形式 [unscaled value, scale],得到的字符串显示在右边。
[123,0] "123" [-123,0] "-123" [123,-1] "1.23E+3" [123,-3] "1.23E+5" [123,1] "12.3" [123,5] "0.00123" [123,10] "1.23E-8" [-123,12] "-1.23E-10"注:
BigDecimal(String)
构造方法将该字符串表示形式转换为 BigDecimal,则将恢复初始值。
NumberFormat
类及其子类可以处理区分语言环境的数的格式化和分析。
toEngineeringString()
方法可用于在工程计数法中表示带有指数的数。setScale
方法可用于对 BigDecimal 进行舍入,使其小数点后的位数为已知位数。
Object
中的 toString
Character.forDigit(int, int)
,
BigDecimal(java.lang.String)
public String toEngineeringString()
返回如 toString()
方法中所描述的表示 BigDecimal 的字符串,不包括使用指数记数法的情况,将十的幂调整为三的倍数(工程记数法),这样,非零值的整数部分的范围是 1 到 999。如果对零值使用指数记数法,则使用小数点和小数的一(或二)个零数字,以便保留零值的标度。注意,与 toString()
的输出不同,如果使用 string constructor 将输出字符串转换为 BigDecimal,则此方法的输出不 保证恢复此 BigDecimal 的相同 [integer, scale] 对。此方法满足以下较弱约束,即产生的结果在数值上始终等于将字符串构造方法应用到方法的输出得到的结果。
public String toPlainString()
toString()
,
toEngineeringString()
public BigInteger toBigInteger()
要在转换不准确时(即当丢弃非零小数部分时)抛出异常,请使用 toBigIntegerExact()
方法。
public BigInteger toBigIntegerExact()
ArithmeticException
- 如果 this 具有非零小数部分。public long longValue()
Number
中的 longValue
public long longValueExact()
ArithmeticException
- 如果 this 具有非零小数部分,或者不适合用 long 表示。public int intValue()
Number
中的 intValue
public int intValueExact()
ArithmeticException
- 如果 this 具有非零小数部分,或者不适合用 int 表示。public short shortValueExact()
ArithmeticException
- 如果 this 具有非零小数部分,或者不适合用 short 表示。public byte byteValueExact()
ArithmeticException
- 如果 this 具有非零小数部分,或者不适合用 byte 表示。public float floatValue()
Float.NEGATIVE_INFINITY
或 Float.POSITIVE_INFINITY
。注意,即使在返回值为有限值的情况下,此转换也可能丢失关于 BigDecimal 值精度的信息。
Number
中的 floatValue
public double doubleValue()
Double.NEGATIVE_INFINITY
或 Double.POSITIVE_INFINITY
。注意,即使在返回值为有限值的情况下,此转换也可能丢失关于 BigDecimal 值精度的信息。
Number
中的 doubleValue
public BigDecimal ulp()
this
相同的标度存储该结果,这样,零和非零值的结果等于 [1, this.scale()]
。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。