public class BigDecimal extends Number implements Comparable<BigDecimal>
BigDecimal
由任意精度整数未缩放值和32位整数级别组成 。
如果为零或正数,则刻度是小数点右侧的位数。
如果是负数,则数字的非标定值乘以10,以达到等级的否定的幂。
因此,BigDecimal所代表的BigDecimal
值为(unscaledValue × 10-scale) 。
BigDecimal
类提供了算术,缩放操作,舍入,比较,散列和格式转换的操作。 toString()
方法提供了一个BigDecimal的规范BigDecimal
。
BigDecimal
类使用户完全控制舍入行为。 如果未指定舍入模式,并且无法表示确切的结果,则抛出异常; 否则,可以通过向操作提供适当的MathContext
对象来进行计算,以选择精度和舍入模式。 在这两种情况下,都提供了八种舍入方式来控制舍入。 使用此类中的整数字段(如ROUND_HALF_UP
)表示舍入模式已经过时了; 应该使用RoundingMode
枚举
(如RoundingMode.HALF_UP
)的枚举值。
当一个MathContext
对象的精度设置为0(例如MathContext.UNLIMITED
)时,算术运算是精确的,而不需要MathContext
对象的算术方法也是MathContext
。 (这是在5之前版本中支持的唯一行为。)作为计算确切结果的推论,不使用精度设置为0的MathContext
对象的舍入模式设置,因此无关紧要。 在分割的情况下,精确的商可以具有无限长的十进制扩展; 例如1除以3.如果商具有非终止十进制扩展,并且指定操作返回精确结果,则抛出ArithmeticException
。 否则,返回除法的确切结果,与其他操作一样。
当精度设置不为0时, BigDecimal
算术的规则与ANSI X3.274-1996和ANSI X3.274-1996 / AM 1-2000(第7.4节)中定义的算法的选定操作模式大体兼容。 与这些标准不同, BigDecimal
包括许多舍入模式,这些模式在BigDecimal
之前的BigDecimal
版本中是必须的。这些ANSI标准与BigDecimal规范之间的BigDecimal
冲突都被解决为有利于BigDecimal
。
由于相同的数值可以具有不同的表示(具有不同的比例),所以算术和舍入规则必须既指定结果表示中使用的数值结果和比例。
通常,舍入模式和精确度设置决定了当精确结果具有更多数字(在分割的情况下可能无限多))时,操作将返回有限数字的结果,而不是返回的位数。 首先,返回的总位数由MathContext
的precision
设置指定; 这决定了结果的精度 。 数字计数从精确结果的最左边的非零数字开始。 舍入模式确定任何丢弃的尾随数字如何影响返回的结果。
对于所有算术运算符,执行操作,就像首先计算精确的中间结果,然后使用选择的舍入模式,舍入为精度设置(如果需要)指定的位数。 如果没有返回确切的结果,则会丢弃精确结果的一些数字位置。 当舍入增加返回结果的大小时,可以通过传播到前导“9”位的进位创建新的数字位置。 例如,将999.9值舍入到三位四舍五入,数值等于一千,表示为100×10 1 。 在这种情况下,新的“1”是返回结果的前导位数。
除了逻辑精确的结果之外,每个算术运算都具有用于表示结果的优选标度。 下表列出了每个操作的首选比例。
Preferred Scales for Results of Arithmetic Operations Operation Preferred Scale of Result Add max(addend.scale(), augend.scale()) Subtract max(minuend.scale(), subtrahend.scale()) Multiply multiplier.scale() + multiplicand.scale() Divide dividend.scale() - divisor.scale()1/32
是0.03125
。
在舍入前,逻辑精确中间结果的比例是该操作的首选比例。 如果确切的数值结果不能在precision
数字中表示,则舍入选择要返回的数字集合,并将结果的比例从中间结果的比例减小到precision
表示实际返回的precision
个数字的最小比例。 如果确切的结果可以用最多precision
个数字表示,那么返回最接近首选标度的比例的结果的表示。 特别地,可以通过删除尾随零和减小刻度来表示精确可表示的商在少于precision
个数字中。 例如,使用floor舍入模式舍入到三位数字,
19/100 = 0.19 // integer=19, scale=2
但
21/110 = 0.190 // integer=190, scale=3
请注意,对于加法,减法和乘法,缩放比例将等于被丢弃的精确结果的数位数。 如果舍入导致进位传播以创建新的高位数字位置,则与没有创建新的数字位置相比,结果的附加数字被丢弃。
其他方法可能略有不同的舍入语义。 例如,使用specified algorithm的pow
方法的结果偶尔可能与最后一个位置的多个单位的圆形数学结果不同,一个ulp 。
提供了两种类型的操作来操纵BigDecimal
:缩放/舍入操作和小数点运动操作的比例。 缩放/舍入操作( setScale
和round
)返回一个BigDecimal
,其值大约(或者恰好等于操作数的值),但其缩放或精度是指定值; 也就是说,它们增加或减少存储数量的精度,对其值的影响最小。 小数点运动操作( movePointLeft
和movePointRight
)返回一个从操作数创建的BigDecimal
通过在指定的方向移动小数点指定的距离。
为了简洁起见,在BigDecimal
方法的描述中使用伪代码。 伪代码表达式(i + j)
是“a BigDecimal
,其值为BigDecimal
i
添加到BigDecimal
j
。 的伪代码表达(i == j)
被简写“ true
当且仅当所述BigDecimal
i
表示相同的值作为BigDecimal
j
”。 类似地解释其他伪代码表达式。 方括号用于表示特定的BigInteger
和定义BigDecimal
值的比例对; 例如[ BigDecimal
]是数字等于0.19的标度为2的BigDecimal
。
注意:如果BigDecimal
对象用作BigDecimal
中的键或SortedSet
中的元素, 则应谨慎行事,因为BigDecimal
的自然排序 与equals不一致 。 见Comparable
, SortedMap
或SortedSet
以获取更多信息。
此类的所有方法和构造NullPointerException
在传递任何输入参数的null
对象引用时抛出NullPointerException。
BigInteger
, MathContext
, RoundingMode
, SortedMap
, SortedSet
, Serialized Form
Modifier and Type | Field and Description |
---|---|
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。
|
Constructor and Description |
---|
BigDecimal(BigInteger val)
将
BigInteger 转换成
BigDecimal 。
|
BigDecimal(BigInteger unscaledVal, int scale)
将BigInteger的
BigInteger 值和
int 等级转换为
BigDecimal 。
|
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
将
BigInteger 未缩放值和
int 扩展转换为
BigDecimal ,根据上下文设置进行舍入。
|
BigDecimal(BigInteger val, MathContext mc)
根据上下文设置将
BigInteger 转换为
BigDecimal 舍入。
|
BigDecimal(char[] in)
|
BigDecimal(char[] in, int offset, int len)
|
BigDecimal(char[] in, int offset, int len, MathContext mc)
|
BigDecimal(char[] in, MathContext mc)
|
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 。
|
BigDecimal(String val, MathContext mc)
|
Modifier and Type | Method and Description |
---|---|
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)
返回
BigDecimal ,其值是
(this + augend) ,根据上下文设置进行舍入。
|
byte |
byteValueExact()
将此
BigDecimal 转换为
byte ,检查丢失的信息。
|
int |
compareTo(BigDecimal val)
将此
BigDecimal 与指定的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)
返回
BigDecimal ,其值是
(this / divisor) ,根据上下文设置进行舍入。
|
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 ,它的值是
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)
返回
BigDecimal ,其值是
(this × multiplicand),根据上下文设置进行舍入。
|
BigDecimal |
negate()
返回
BigDecimal ,其值是
(-this) ,其标为
this.scale() 。
|
BigDecimal |
negate(MathContext mc)
返回
BigDecimal ,其值是
(-this) ,根据上下文设置进行舍入。
|
BigDecimal |
plus()
返回
BigDecimal ,其值是
(+this) ,其标为
this.scale() 。
|
BigDecimal |
plus(MathContext mc)
返回
BigDecimal ,其值是
(+this) ,根据上下文设置进行舍入。
|
BigDecimal |
pow(int n)
返回
BigDecimal ,其值是
(thisn),该电源,准确计算,使其具有无限精度。
|
BigDecimal |
pow(int n, MathContext mc)
返回
BigDecimal ,其值是
(thisn)。
|
int |
precision()
返回此
BigDecimal的
BigDecimal 。
|
BigDecimal |
remainder(BigDecimal divisor)
返回
BigDecimal ,其值是
(this % divisor) 。
|
BigDecimal |
remainder(BigDecimal divisor, MathContext mc)
返回
BigDecimal ,其值是
(this % divisor) ,根据上下文设置进行舍入。
|
BigDecimal |
round(MathContext mc)
返回
BigDecimal 根据四舍五入
MathContext 设置。
|
int |
scale()
返回此
规模
BigDecimal 。
|
BigDecimal |
scaleByPowerOfTen(int n)
返回一个BigDecimal,其数值等于(
this * 10
n )。
|
BigDecimal |
setScale(int newScale)
返回一个
BigDecimal ,其大小是指定值,其值在数字上等于此
BigDecimal 。
|
BigDecimal |
setScale(int newScale, int roundingMode)
返回一个
BigDecimal ,其规模是指定值,其缩放值通过将此
BigDecimal 的非标度值乘以10的适当功率来确定,以维持其总体值。
|
BigDecimal |
setScale(int newScale, RoundingMode roundingMode)
返回一个
BigDecimal ,其规模是指定值,其缩放值通过将该
BigDecimal 的非标度值乘以10的适当功率来确定,以维持其整体值。
|
short |
shortValueExact()
将此
BigDecimal 转换为
short ,检查丢失的信息。
|
int |
signum()
返回这个
BigDecimal 的signum函数。
|
BigDecimal |
stripTrailingZeros()
返回一个
BigDecimal ,它在数字上等于此值,
BigDecimal 表示中删除任何尾随的零。
|
BigDecimal |
subtract(BigDecimal subtrahend)
返回
BigDecimal ,其值是
(this - subtrahend) ,其标为
max(this.scale(), subtrahend.scale()) 。
|
BigDecimal |
subtract(BigDecimal subtrahend, MathContext mc)
返回
BigDecimal ,其值是
(this - subtrahend) ,根据上下文设置进行舍入。
|
BigInteger |
toBigInteger()
将此
BigDecimal 转换为
BigInteger 。
|
BigInteger |
toBigIntegerExact()
将此
BigDecimal 转换为
BigInteger ,检查丢失的信息。
|
String |
toEngineeringString()
如果需要指数,则使用工程符号返回此
BigDecimal 的字符串表示形式。
|
String |
toPlainString()
返回没有指数字段的此
BigDecimal 的字符串表示形式。
|
String |
toString()
返回此
BigDecimal 的字符串表示,如果需要指数,则使用科学计数法。
|
BigDecimal |
ulp()
返回此
BigDecimal 的最后一个位置的ulp(一个单位)的大小。
|
BigInteger |
unscaledValue()
返回一个
BigInteger ,其值是此
BigDecimal 的
未缩放值 。
|
static BigDecimal |
valueOf(double val)
|
static BigDecimal |
valueOf(long val)
将
long 值转换为
BigDecimal ,比例为零。
|
static BigDecimal |
valueOf(long unscaledVal, int scale)
将
long 值和
int 比例转换为
BigDecimal 。
|
byteValue, shortValue
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
BigDecimal
为正,则表现为ROUND_UP
;
如果为负,则表现为ROUND_DOWN
。
请注意,舍入模式不会降低计算值。
public static final int ROUND_FLOOR
BigDecimal
为正,则表现为ROUND_DOWN
;
如果为负,表现为ROUND_UP
。
请注意,舍入模式不会增加计算值。
public static final int ROUND_HALF_UP
ROUND_UP
如果丢弃的分数为0.5,则表现为;
否则,表现为ROUND_DOWN
。
请注意,这是我们大多数人在小学教学的舍入模式。
public static final int ROUND_HALF_DOWN
ROUND_UP
如果丢弃的分数> 0.5,则表示行为;
否则,表现为ROUND_DOWN
。
public static final int ROUND_HALF_EVEN
ROUND_HALF_UP
行为,如果丢弃的分数的左边的数字是奇数的;
像ROUND_HALF_DOWN
一样,如果它是均匀的。
请注意,这是在一系列计算中重复应用时最小化累积误差的舍入模式。
public static final int ROUND_UNNECESSARY
ArithmeticException
。
public BigDecimal(char[] in, int offset, int len)
BigDecimal
成BigDecimal
,接受字符作为的相同序列BigDecimal(String)
构造,同时允许一个子阵列被指定。
请注意,如果字符序列在字符数组中已经可用,则使用此构造函数比将char
数组转换为字符串并使用BigDecimal(String)
构造函数更快。
in
-
char
数组是字符源。
offset
- 要检查的数组中的第一个字符。
len
- 要考虑的
len
数
NumberFormatException
-如果
in
不是的有效表示
BigDecimal
或所定义的子阵列是不完全内
in
。
public BigDecimal(char[] in, int offset, int len, MathContext mc)
BigDecimal
成BigDecimal
,接受字符作为的相同序列BigDecimal(String)
构造,同时允许指定一个子阵列和用根据上下文设置进行舍入。
请注意,如果字符序列在字符数组中已经可用,则使用此构造函数比将char
数组转换为字符串并使用BigDecimal(String)
构造函数更快。
in
-
char
数组是字符源。
offset
- 要检查的数组中的第一个字符。
len
- 要考虑的
len
数
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
NumberFormatException
-如果
in
不是的有效表示
BigDecimal
或所定义的子阵列是不完全内
in
。
public BigDecimal(char[] in)
BigDecimal
成BigDecimal
,接受字符作为的相同序列BigDecimal(String)
构造。
请注意,如果字符序列已经可用作字符数组,则使用此构造函数比将char
数组转换为字符串并使用BigDecimal(String)
构造函数更快。
in
-
char
源的数组。
NumberFormatException
- 如果
in
不是BigDecimal的有效
BigDecimal
。
public BigDecimal(char[] in, MathContext mc)
BigDecimal
成BigDecimal
,接受相同的字符序列作为BigDecimal(String)
构造与根据上下文设置进行舍入。
请注意,如果字符序列已经可以作为字符数组使用,使用此构造函数比将char
数组转换为字符串并使用BigDecimal(String)
构造函数更快。
in
-
char
数组是字符源。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
NumberFormatException
- 如果
in
不是BigDecimal的有效
BigDecimal
。
public BigDecimal(String val)
BigDecimal
转换为BigDecimal
。
字符串表示由可选符号'+'
( '\u002B' )或'-'
( '\u002D' )组成,后面是零个或多个十进制数字(“整数”)的序列,可选地后跟一个分数,可选地后跟指数。
小数部分包含一个小数点,后跟零个或多个十进制数字。 字符串必须包含整数或分数中的至少一个数字。 由符号,整数和分数形成的数字称为有效数 。
指数由字符'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:
- any character for which
Character.isDigit(char)
returnstrue
, including 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的字符串
BigDecimal
。
NumberFormatException
- 如果
val
不是BigDecimal的有效
BigDecimal
。
public BigDecimal(String val, MathContext mc)
val
- 一个
BigDecimal
字符串
BigDecimal
。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
NumberFormatException
- 如果
val
不是BigDecimal的有效表示。
public BigDecimal(double val)
double
转换为BigDecimal
,这是double
的二进制浮点值的精确十进制表示。
返回的BigDecimal
是(10scale × val)是一个整数的最小值。
笔记:
new BigDecimal(0.1)
创建一个BigDecimal
,它完全等于0.1(非标尺值为1,比例为1),但实际上等于0.1000000000000000055511151231257827021181583404541015625。 这是因为0.1不能像double
(或者作为任何有限长度的二进制分数)精确地表示。 因此,正在被传递给构造的值不是正好等于0.1,虽然表面上。 String
构造,在另一方面,是完全可以预测的:写new BigDecimal("0.1")
创建BigDecimal
这正好等于0.1,正如人们所期望的那样。 因此, 一般建议使用String constructor优先于此。 double
必须用作源为BigDecimal
,注意,此构造提供了一个精确的转换; 它不会将double
转换为String
使用Double.toString(double)
方法,然后使用BigDecimal(String)
构造函数相同的结果。 要获得该结果,请使用static
valueOf(double)
方法。 val
-
double
值转换为
BigDecimal
。
NumberFormatException
- 如果
val
是无限或NaN。
public BigDecimal(double val, MathContext mc)
double
转换为BigDecimal
,根据上下文设置进行舍入。
BigDecimal
是(10scale × val)是一个整数的最小值。
该构造函数的结果可能有些不可预测,一般不推荐使用它; 请参阅BigDecimal(double)
构造函数下的注释。
val
-
double
要转换为
BigDecimal
值。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不正确但RoundingMode是UNNECESSARY。
NumberFormatException
- 如果
val
是无限或NaN。
public BigDecimal(BigInteger val)
BigInteger
转换为BigDecimal
。
BigDecimal
的规模为零。
val
-
BigInteger
要转换为
BigDecimal
值。
public BigDecimal(BigInteger val, MathContext mc)
BigInteger
转换为BigDecimal
舍入。
BigDecimal
的规模为零。
val
-
BigInteger
值转换为
BigDecimal
。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public BigDecimal(BigInteger unscaledVal, int scale)
BigInteger
未BigInteger
值和int
标度转换为BigDecimal
。
BigDecimal
的价值是(unscaledVal × 10-scale) 。
unscaledVal
-
unscaledVal
值
BigDecimal
。
scale
- 规模
BigDecimal
。
public BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
BigInteger
标度值和int
标度转换为BigDecimal
,根据上下文设置进行舍入。
BigDecimal
值为(unscaledVal × 10-scale) ,根据precision
和舍入模式设置舍入。
unscaledVal
- unscaled value的
BigDecimal
。
scale
- 规模的
BigDecimal
。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public BigDecimal(int val)
int
成BigDecimal
。
BigDecimal
的规模为零。
val
-
int
要转换为
BigDecimal
值。
public BigDecimal(int val, MathContext mc)
int
转换为BigDecimal
,根据上下文设置进行舍入。
BigDecimal
的规模在任何四舍五入之前为零。
val
-
int
值转换为
BigDecimal
。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public BigDecimal(long val)
long
转换为BigDecimal
。
BigDecimal
的规模为零。
val
-
long
值转换为
BigDecimal
。
public BigDecimal(long val, MathContext mc)
long
转换为BigDecimal
,根据上下文设置进行舍入。
BigDecimal
的规模在任何舍入之前为零。
val
-
long
值转换为
BigDecimal
。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public static BigDecimal valueOf(long unscaledVal, int scale)
long
未缩放值和int
量表转换为BigDecimal
。
优先提供给(在此“静态工厂法” long
, int
)构造,因为它允许使用频率重用BigDecimal
值..
unscaledVal
-的的非标度值
BigDecimal
。
scale
- 规模的
BigDecimal
。
BigDecimal
的值是
(unscaledVal × 10-scale) 。
public static BigDecimal valueOf(long val)
long
值转换为BigDecimal
,缩放为零。
这种“静态工厂方法”优先于( long
)构造函数,因为它允许重用常用的BigDecimal
值。
val
- 的价值
BigDecimal
。
BigDecimal
的值是
val
。
public static BigDecimal valueOf(double val)
double
成BigDecimal
,使用double
通过所提供的规范的字符串表示Double.toString(double)
方法。
注意:这通常是转换的首选方法double
(或float
)成BigDecimal
,作为返回的值等于从构建所得BigDecimal
使用的结果Double.toString(double)
。
val
-
double
转换为
BigDecimal
。
BigDecimal
,其值等于或约等于的值
val
。
NumberFormatException
- 如果
val
是无限或NaN。
public BigDecimal add(BigDecimal augend)
BigDecimal
,其值是
(this + augend)
,其标为
max(this.scale(), augend.scale())
。
augend
- 要添加到此
BigDecimal
。
this + augend
public BigDecimal add(BigDecimal augend, MathContext mc)
BigDecimal
,其值是(this + augend)
,根据上下文设置进行舍入。
如果任一数字为零,并且精度设置为非零,则使用其他数字(如果需要舍入)作为结果。
augend
- 要添加到此
BigDecimal
。
mc
- 要使用的上下文。
this + augend
,根据需要舍入。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public BigDecimal subtract(BigDecimal subtrahend)
BigDecimal
,其值是
(this - subtrahend)
,其标为
max(this.scale(), subtrahend.scale())
。
subtrahend
- 要从该
BigDecimal
。
this - subtrahend
public BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
BigDecimal
,其值是(this - subtrahend)
,根据上下文设置进行舍入。
如果subtrahend
为零,则作为结果使用,如果需要,则舍入。
如果这是零,那么结果是subtrahend.negate(mc)
。
subtrahend
- 要从该
BigDecimal
。
mc
- 要使用的上下文。
this - subtrahend
,
this - subtrahend
时舍入。
ArithmeticException
- 如果结果不
UNNECESSARY
但舍入方式为
UNNECESSARY
。
public BigDecimal multiply(BigDecimal multiplicand)
BigDecimal
,其值是
(this × multiplicand),其标为
(this.scale() + multiplicand.scale())
。
multiplicand
-价值被这个乘以
BigDecimal
。
this * multiplicand
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
BigDecimal
,其值是
(this × multiplicand),根据上下文设置进行舍入。
multiplicand
-价值被这个乘以
BigDecimal
。
mc
- 要使用的上下文。
this * multiplicand
,
this * multiplicand
时舍入。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
BigDecimal
,其值为(this / divisor)
,其比例为指定。
如果必须执行舍入以生成指定刻度的结果,则应用指定的舍入模式。
应该使用新的divide(BigDecimal, int, RoundingMode)
方法来优先于这种传统方法。
divisor
- 这个
BigDecimal
要被划分的值。
scale
- 要返回的
BigDecimal
商的比例。
roundingMode
- 舍入模式申请。
this / divisor
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)
BigDecimal
,其值为(this / divisor)
,其比例为指定。
如果必须执行舍入以生成指定刻度的结果,则应用指定的舍入模式。
divisor
- 这个
BigDecimal
将被划分的值。
scale
- 要返回的
BigDecimal
。
roundingMode
- 舍入模式申请。
this / divisor
ArithmeticException
- 如果
divisor
为零,
roundingMode==RoundingMode.UNNECESSARY
和指定的比例不足以表示精确的除法结果。
public BigDecimal divide(BigDecimal divisor, int roundingMode)
BigDecimal
,其值是(this / divisor)
,其标为this.scale()
。
如果必须执行舍入以产生给定刻度的结果,则应用指定的舍入模式。
应该使用新的divide(BigDecimal, RoundingMode)
方法优先于此传统方法。
divisor
- 这个
BigDecimal
将被划分的值。
roundingMode
- 舍入模式申请。
this / divisor
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)
BigDecimal
,其值是(this / divisor)
,其标为this.scale()
。
如果必须执行舍入以产生给定刻度的结果,则应用指定的舍入模式。
divisor
- 这个
BigDecimal
将被划分的值。
roundingMode
- 舍入模式适用。
this / divisor
ArithmeticException
- 如果
divisor==0
或
roundingMode==RoundingMode.UNNECESSARY
和
this.scale()
不足以精确地表示除法的结果。
public BigDecimal divide(BigDecimal divisor)
BigDecimal
,其值是(this / divisor)
,并且其优选的比例为(this.scale() - divisor.scale())
;
如果确切的商不能被表示(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException
。
divisor
- 这个
BigDecimal
将被划分的值。
this / divisor
ArithmeticException
- 如果确切商没有终止十进制扩展
public BigDecimal divide(BigDecimal divisor, MathContext mc)
BigDecimal
,其值是
(this / divisor)
,根据上下文设置进行舍入。
divisor
- 这个
BigDecimal
将被划分的值。
mc
- 要使用的上下文。
this / divisor
,
this / divisor
时舍入。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
或
mc.precision == 0
,商为非终止十进制扩展。
public BigDecimal divideToIntegralValue(BigDecimal divisor)
BigDecimal
,其值是(this / divisor)
舍入的商(this / divisor)
的整数部分。
结果的首选尺度为(this.scale() - divisor.scale())
。
divisor
- 这个
BigDecimal
将被划分的值。
this / divisor
。
ArithmeticException
- 如果
divisor==0
public BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
BigDecimal
,其值是整数部分(this / divisor)
。
由于精确商的整数部分不依赖舍入模式,因此舍入模式不影响此方法返回的值。
结果的首选尺度为(this.scale() - divisor.scale())
。
一个ArithmeticException
如果准确的商值的整数部分需要超过抛出mc.precision
数字。
divisor
- 这个
BigDecimal
要被划分的值。
mc
- 要使用的上下文。
this / divisor
的整数部分。
ArithmeticException
- 如果
divisor==0
ArithmeticException
- 如果
mc.precision
> 0,并且结果需要大于
mc.precision
位数的精度。
public BigDecimal remainder(BigDecimal divisor)
BigDecimal
,其值是(this % divisor)
。
余数由this.subtract(this.divideToIntegralValue(divisor).multiply(divisor))
。 请注意,这不是模运算(结果可以是负数)。
divisor
- 这个
BigDecimal
要被划分的值。
this % divisor
。
ArithmeticException
- 如果
divisor==0
public BigDecimal remainder(BigDecimal divisor, MathContext mc)
BigDecimal
,其值是(this % divisor)
,根据上下文设置进行舍入。
MathContext
设置影响用于计算余数的隐含分隔。
其余的计算本身就是按照准确的。
因此,其余可能包含超过mc.getPrecision()
个数字。
余数由this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor))
。 请注意,这不是模运算(结果可以是负数)。
divisor
- 这个
BigDecimal
将被划分的值。
mc
- 要使用的上下文。
this % divisor
,
this % divisor
时舍入。
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)
BigDecimal
阵列含有的结果divideToIntegralValue
接着的结果remainder
上的两个操作数。
注意,如果需要整数商和余数,该方法比divideToIntegralValue
使用divideToIntegralValue
和remainder
方法更快,因为除法只需要执行一次。
divisor
- 这个
BigDecimal
要被划分的值,
BigDecimal
是计算的。
BigDecimal
数组:商(
divideToIntegralValue
的结果)是初始元素,余数是最后一个元素。
ArithmeticException
- 如果是
divisor==0
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
,
remainder(java.math.BigDecimal, java.math.MathContext)
public BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
BigDecimal
阵列含有的结果divideToIntegralValue
接着的结果remainder
上与根据上下文设置进行舍入计算出的两个操作数。
请注意,如果需要整数商和余数,则该方法比divideToIntegralValue
使用divideToIntegralValue
和remainder
方法更快,因为除法仅需执行一次。
divisor
- 这个
BigDecimal
要被划分的值,
BigDecimal
是计算的。
mc
- 要使用的上下文。
BigDecimal
数组:商(
divideToIntegralValue
的结果)是初始元素,余数是最后一个元素。
ArithmeticException
- 如果是
divisor==0
ArithmeticException
- 如果结果不
UNNECESSARY
,但舍入模式为
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)
BigDecimal
,其值是(thisn),该电源,准确计算,使其具有无限精度。
参数n
的范围必须在0到999999999之间。 ZERO.pow(0)
返回ONE
。 请注意,将来的版本可能会扩大此方法的允许指数范围。
n
- 提高这
BigDecimal
。
ArithmeticException
- 如果
n
超出范围。
public BigDecimal pow(int n, MathContext mc)
BigDecimal
,其值是(thisn)。
目前的实现使用ANSI标准X3.274-1996中定义的核心算法,根据上下文设置进行舍入。
通常,返回的数值在所选精度的精确数值的两个ul内。
请注意,未来的版本可能会使用不同的算法,减少了允许的误差范围和增加的允许指数范围。
X3.274-1996算法是:
ArithmeticException
异常
abs(n) > 999999999
mc.precision == 0
和n < 0
mc.precision > 0
和n
有超过mc.precision
十进制数字 n
为零, ONE
返回即使this
是零,否则
n
为正,则将结果通过重复的平方技术计算到单个累加器中。 与蓄能器的各个乘法中使用相同的数学上下文设置为mc
除了一个精度提高到mc.precision + elength + 1
其中elength
是十进制数字的数量n
。 n
是否定的,则结果被计算为如果n
为阳性; 然后使用上述工作精度将该值分为一个。 n
- 提高这个
BigDecimal
。
mc
- 要使用的上下文。
ArithmeticException
- 如果结果不
UNNECESSARY
,但舍入方式为
UNNECESSARY
,或
n
超出范围。
public BigDecimal abs()
BigDecimal
,其值为此
BigDecimal
的绝对值,其缩放比例为
this.scale()
。
abs(this)
public BigDecimal abs(MathContext mc)
BigDecimal
,其值为此
BigDecimal
的绝对值,根据上下文设置进行舍入。
mc
- 要使用的上下文。
abs(this)
,
abs(this)
时舍入。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public BigDecimal negate()
BigDecimal
,其值是
(-this)
,其标为
this.scale()
。
-this
。
public BigDecimal negate(MathContext mc)
BigDecimal
,其值是
(-this)
,根据上下文设置进行舍入。
mc
- 要使用的上下文。
-this
,
-this
时舍入。
ArithmeticException
- 如果结果不
ArithmeticException
,但舍入方式为
UNNECESSARY
。
public BigDecimal plus()
BigDecimal
,其值是(+this)
,其标为this.scale()
。
这个方法,简单地返回这个BigDecimal
包含与一元负方法negate()
的对称性 。
this
。
negate()
public BigDecimal plus(MathContext mc)
BigDecimal
,其值是(+this)
,根据上下文设置进行舍入。
该方法的效果与round(MathContext)
方法的效果相同。
mc
- 要使用的上下文。
this
,根据需要舍入。
零结果将具有0的比例。
ArithmeticException
- 如果结果不精确但是舍入模式是
UNNECESSARY
。
round(MathContext)
public int signum()
BigDecimal
的signum函数。
BigDecimal
值为负,零或正。
public int scale()
BigDecimal
。
如果为零或正数,则刻度是小数点右侧的位数。
如果是负数,则数字的非标定值乘以10,以达到等级的否定的幂。
例如, -3
的比例表示未标定值乘以1000。
BigDecimal
。
public int precision()
BigDecimal
。
(精度是未缩放值的位数)
零值的精度为1。
BigDecimal
。
public BigInteger unscaledValue()
BigInteger
,其值是此BigDecimal
的未缩放值 。
(计算(this * 10this.scale()) )
BigDecimal
价值。
public BigDecimal round(MathContext mc)
mc
- 要使用的上下文。
BigDecimal
根据
MathContext
设置舍入。
ArithmeticException
- 如果舍入模式为
UNNECESSARY
,并且
BigDecimal
操作将需要舍入。
plus(MathContext)
public BigDecimal setScale(int newScale, RoundingMode roundingMode)
BigDecimal
,其大小是指定的值,并且其取消的值通过将此BigDecimal
的非标度值乘以10的适当功率来确定,以维持其整体值。
如果通过操作缩小比例,则将非标定值除以(而不是乘以),并且该值可能会被更改;
在这种情况下,指定的舍入模式被应用于该划分。
请注意,由于BigDecimal对象是不可变的,所以此方法的调用不会导致原始对象被修改,这与通常使用名为setX mutate字段X
方法X
。 相反, setScale
返回具有适当比例的对象; 返回的对象可能会被新分配,也可能不会被新分配。
newScale
- 要退回的
BigDecimal
值的比例。
roundingMode
- 要应用的舍入模式。
BigDecimal
,其规模是指定值,并且其缩放值通过将此
BigDecimal
的非标度值乘以10的适当功率来确定,以维持其总体值。
ArithmeticException
- 如果
roundingMode==UNNECESSARY
和指定的缩放操作将需要四舍五入。
RoundingMode
public BigDecimal setScale(int newScale, int roundingMode)
BigDecimal
,其大小是指定的值,并且其缩放值通过将此BigDecimal
的非标度值乘以10的适当功率来确定,以维持其整体值。
如果通过操作缩小比例,则将非标定值除以(而不是乘以),并且该值可能会被更改;
在这种情况下,指定的舍入模式被应用于该划分。
请注意,由于BigDecimal对象是不可变的,所以此方法的调用不会导致原始对象被修改,这与通常使用名为setX mutate字段X
方法X
。 相反, setScale
返回具有适当比例的对象; 返回的对象可能会被新分配,也可能不会被新分配。
应该使用新的setScale(int, RoundingMode)
方法来优先于这种传统方法。
newScale
- 要退回的
BigDecimal
值的比例。
roundingMode
- 要应用的舍入模式。
BigDecimal
,其规模是指定值,并且其缩放值通过将该
BigDecimal
的非标度值乘以10的适当功率来确定,以维持其总体值。
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
。
抛出一个ArithmeticException
如果这是不可能的。
此调用通常用于增加比例,在这种情况下,可以确保存在指定BigDecimal
的BigDecimal和正确的值。 如果调用者知道BigDecimal
在其小数部分结尾处具有足够多的零(即,其整数值中的十个因子)以允许重新调整而不改变其值,那么该调用也可以用于减小比例。
该方法返回与setScale
的双参数版本相同的结果,但是在不相关的情况下,会保存调用者指定舍入模式的麻烦。
注意,由于BigDecimal
对象是不可变的,所以这种方法的调用不会导致原始对象被修改,这与通常使用名为setX mutate字段X
方法X
。 相反, setScale
返回具有适当比例的对象; 返回的对象可能会被新分配,也可能不会被新分配。
newScale
- 要退回的
BigDecimal
值的比例。
BigDecimal
,其规模是指定值,其非标度值通过将此
BigDecimal
的非标度值乘以10的适当功率来确定,以维持其总体值。
ArithmeticException
- 如果指定的缩放操作需要舍入。
setScale(int, int)
,
setScale(int, RoundingMode)
public BigDecimal movePointLeft(int n)
BigDecimal
,相当于这个小数点n
个地方。
如果n
是非负数,则调用仅将n
添加到比例。
如果n
为负,则该呼叫相当于movePointRight(-n)
。
此呼叫返回的BigDecimal
具有值(this × 10-n)和scale max(this.scale()+n, 0)
。
n
- 将小数点向左移动的位数。
BigDecimal
相当于这个与小数点
n
个地方。
ArithmeticException
- 如果比例溢出。
public BigDecimal movePointRight(int n)
BigDecimal
,相当于这个小数点,向右移动了n
个地方。
如果n
是非负数,则调用仅从标度中减去n
。
如果n
为负数,则该呼叫相当于movePointLeft(-n)
。
此呼叫返回的BigDecimal
值为(this × 10n)和scale max(this.scale()-n, 0)
。
n
- 将小数点向右移动的位数。
BigDecimal
相当于这个与小数点移动的位置在右边的
n
。
ArithmeticException
- 如果比例溢出。
public BigDecimal scaleByPowerOfTen(int n)
this
* 10 n )。
结果的比例为(this.scale() - n)
。
n
- 十个指数幂的比例
this
* 10
n )的
this
ArithmeticException
- 如果缩放比例在32位整数的范围之外。
public BigDecimal stripTrailingZeros()
BigDecimal
,它在数字上等于此值, BigDecimal
表示中删除任何尾随零。
例如,从汽提尾随零BigDecimal
值600.0
,其具有[ BigInteger
, scale
]组件等于[6000,1],产率6E2
与[ BigInteger
, scale
]组分等于[6,-2]。
如果这个BigDecimal在数字上等于零,则返回BigDecimal.ZERO
。
BigDecimal
,任何尾随零被删除。
public int compareTo(BigDecimal val)
BigDecimal
与指定的BigDecimal进行BigDecimal
。
两个BigDecimal
对象的价值相等但具有不同的比例(如2.0和2.00)被认为是相等的这种方法。
该方法优先于六个布尔比较运算符(<,==,>,> =,!=,<=)中的每一个的各个方法。
用于执行这些比较的建议成语是: (x.compareTo(y)
< op > 0)
,其中< op >是六个比较运算符之一。
compareTo
中的
Comparable<BigDecimal>
val
-
BigDecimal
,对此
BigDecimal
进行比较。
BigDecimal
在数字上小于,等于或大于
val
。
public boolean equals(Object x)
BigDecimal
与指定的Object
进行比较以获得相等性。
与compareTo
不同,该方法认为两个BigDecimal
对象只有在值和比例相等时才相等(因此,当通过此方法比较时,2.0不等于2.00)。
equals
在
Object
x
-
Object
要对这
BigDecimal
进行比较。
true
当且仅当指定的
Object
为
BigDecimal
,其值和比例等于该
BigDecimal
的时候。
compareTo(java.math.BigDecimal)
,
hashCode()
public BigDecimal min(BigDecimal val)
BigDecimal
和
val
。
val
- 要计算最小值的值。
BigDecimal
的价值是该BigDecimal
和val
较小的一个。
如果它们相同, 则由compareTo
方法定义,则返回this
。
compareTo(java.math.BigDecimal)
public BigDecimal max(BigDecimal val)
BigDecimal
和
val
。
val
- 要计算最大值的值。
BigDecimal
的价值是该BigDecimal
和val
中的较大val
。
如果它们相同, 则由compareTo
方法定义,则返回this
。
compareTo(java.math.BigDecimal)
public int hashCode()
BigDecimal
的哈希码。
请注意,两个BigDecimal
对象在数字上相等但尺度不同(如2.0和2.00)通常不会有相同的哈希码。
hashCode
在
Object
BigDecimal
哈希码。
equals(Object)
public String toString()
BigDecimal
的字符串表示形式,如果需要指数则使用科学记数法。
通过以下步骤创建BigDecimal
标准规范字符串形式:首先,BigDecimal的未缩放值的BigDecimal
将转换为字符串,使用字符'0'
至'9'
,不带前导零(除其值为零,在这种情况下使用单个'0'
字符)。
接下来,计算调整后的指数 ; 这是否定的比例,加上转换后的未标定值的字符数少于1。 也就是说, -scale+(ulength-1)
,其中ulength
是以十进制数字表示的非标度值的绝对值的长度(其精度 )。
如果比例大于或等于零,并且调整后的指数大于或等于-6
,则该数字将转换为字符形式而不使用指数符号。 在这种情况下,如果刻度为零,则不加小数点,如果刻度为正,则将插入小数点,刻度指定小数点右侧的字符数。 '0'
根据需要添加到转换的未缩放值的左侧。 如果在插入后没有字符在小数点之前,那么常规的'0'
字符是前缀。
否则(即,如果比例为负数,或调整后的指数小于-6
),则使用指数符号将该数字转换为字符形式。 在这种情况下,如果转换后的BigInteger
有多个数字,则在第一个数字后面插入一个小数点。 然后,字符形式的指数后缀转换为转换的未缩放值(可能带有插入的小数点); 这包括字母'E'
紧随其后,被调整的指数转换为字符形式。 后者基于十,使用没有前导零的字符'0'
至'9'
,如果调整后的指数为负,则总是以符号字符'-'
( '\u002D' )为前缀, '+'
( '\u002B' ))。
最后,如果未缩放的值小于零,则整个字符串前面加上减号'-'
( '\u002D' )。 如果未标定值为零或正数,则不会标记符号。
例子:
对于左侧的每个表示[ 未缩放值 , 缩放 ],生成的字符串显示在右侧。
[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
值与此转换的结果之间存在一对一映射。 也就是说,作为使用toString
的结果,每个可区分的BigDecimal
值(非标度值和比例)都有唯一的字符串表示形式。 如果该字符串表示转换回BigDecimal
使用BigDecimal(String)
构造,则原始值将被回收。 NumberFormat
类及其子类来处理。 toEngineeringString()
方法可用于以工程符号表示数字,并且setScale
方法可用于对BigDecimal
进行舍入,因此它具有小数点后的已知数字位数。 Character.forDigit
被使用。 toString
在
Object
BigDecimal
字符串表示
BigDecimal
。
Character.forDigit(int, int)
,
BigDecimal(java.lang.String)
public String toEngineeringString()
BigDecimal
的字符串表示形式。
返回一个表示toString()
方法中描述的BigDecimal
的字符串,但如果使用指数符号,则将十的幂调整为三(工程符号)的倍数,使得非零值的整数部分将位于范围1到999.如果指数符号用于零值,则使用小数点和一个或两个小数零数字,以保持零值的比例。 注意,与输出toString()
,这种方法的输出是不能保证恢复相同[整数,标度]对本的BigDecimal
如果输出串转换回一个BigDecimal
使用string constructor 。 该方法的结果满足了通过将字符串构造函数应用于方法的输出来总是产生数值相等的结果的较弱约束。
BigDecimal
字符串表示法,如果需要指数,则使用工程符号。
public String toPlainString()
BigDecimal
的字符串表示形式。
对于正比例的值,小数点右侧的位数用于表示比例。
对于零或负比例的值,生成的字符串就像将值转换为数字相等的零标度值一样生成,并且如果零比例值的所有尾部零都存在于结果中。
如果未缩放的值小于零,则整个字符串前加一个减号字符' - '( '\u002D' )。
如果未标定值为零或正数,则不会标记符号。
注意,如果该方法的结果被传递到string constructor ,仅此的数值BigDecimal
将必然被回收;
新的BigDecimal
可能有不同的比例。
特别地,如果这个BigDecimal
具有负比例尺,则由该方法生成的字符串将在字符串构造函数处理时具有0的比例。
(该方法类似于1.4和更早版本中的toString
方法。)
BigDecimal
的字符串表示。
toString()
,
toEngineeringString()
public BigInteger toBigInteger()
BigDecimal
转换为BigInteger
。
此转换类似于从基本收缩转换 double
至long
如在章节的The Java™ Language Specification 5.1.3定义:此的任何小数部分BigDecimal
将被丢弃。
请注意,此转换可能会丢失有关BigDecimal的BigDecimal
。
如果转换不正确(换句话说,如果非零小数部分被丢弃),则抛出异常,请使用toBigIntegerExact()
方法。
BigDecimal
转换成
BigInteger
。
public BigInteger toBigIntegerExact()
BigDecimal
转换为BigInteger
,检查丢失的信息。
如果此BigDecimal
具有非零小数部分,则抛出异常。
BigDecimal
转换为
BigInteger
。
ArithmeticException
- 如果
this
具有非零分数部分。
public long longValue()
BigDecimal
转换为long
。
此转换类似于从基本收缩转换 double
至short
如在The Java™ Language Specification部分5.1.3中定义:此的任何小数部分BigDecimal
将被丢弃,并且如果产生的“ BigInteger
”太大而不适合在一个long
,只返回低位64位。
请注意,此转换可能会丢失有关该BigDecimal
值的总体大小和精度的信息,并返回相反的结果。
public long longValueExact()
BigDecimal
转换为long
,检查丢失的信息。
如果此BigDecimal
具有非零小数部分,或者超出了long
结果的可能范围,则抛出ArithmeticException
。
BigDecimal
转换成
long
。
ArithmeticException
- 如果
this
具有非零分数部分,或者不适合
long
。
public int intValue()
BigDecimal
转换为int
。
此转换类似于从基本收缩转换 double
至short
如在The Java™ Language Specification部分5.1.3中定义:此的任何小数部分BigDecimal
将被丢弃,并且如果产生的“ BigInteger
”太大而不适合用int
,只返回低位32位。
请注意,此转换可能会丢失有关此BigDecimal
值的总体大小和精度的信息,并返回相反符号的结果。
public int intValueExact()
BigDecimal
转换为int
,检查丢失的信息。
如果这个BigDecimal
具有非零小数部分,或者超出了int
结果的可能范围,则抛出ArithmeticException
。
BigDecimal
转换成
int
。
ArithmeticException
- 如果
this
具有非零小数部分,或不适合
int
。
public short shortValueExact()
BigDecimal
转换为short
,检查丢失的信息。
如果这个BigDecimal
具有非零小数部分,或者超出了short
结果的可能范围,则抛出一个ArithmeticException
。
BigDecimal
转换成
short
。
ArithmeticException
- 如果
this
具有非零小数部分,或不适合于
short
。
public byte byteValueExact()
BigDecimal
转换为byte
,检查丢失的信息。
如果这个BigDecimal
具有非零小数部分,或者超出了byte
结果的可能范围,则抛出一个ArithmeticException
。
BigDecimal
转换为
byte
。
ArithmeticException
- 如果
this
具有非零小数部分,或者不适合
byte
。
public float floatValue()
BigDecimal
转换为float
。
这种转换是类似于从基本收缩转换 double
至float
如在章节的The Java™ Language Specification 5.1.3定义:如果此BigDecimal
有太大的幅度来表示作为float
,它会被转换为Float.NEGATIVE_INFINITY
或Float.POSITIVE_INFINITY
适当。
请注意,即使返回值有限,此转换也可能会丢失有关BigDecimal
值的BigDecimal
。
floatValue
在
Number
BigDecimal
转换成
float
。
public double doubleValue()
BigDecimal
转换为double
。
这种转换是类似于从基本收缩转换 double
至float
如在章节的The Java™ Language Specification 5.1.3定义:如果此BigDecimal
有太大的幅度代表作为double
,它会被转换为Double.NEGATIVE_INFINITY
或Double.POSITIVE_INFINITY
适当。
请注意,即使返回值有限,此转换也可能会丢失有关BigDecimal的BigDecimal
。
doubleValue
在
Number
BigDecimal
转换成
double
。
public BigDecimal ulp()
BigDecimal
的最后一个单位的ulp的大小。
非零BigDecimal
值的ulp是该值与BigDecimal
值之间的正距离,接下来的数字大小相同,数字相同。
零值的数值在数字上等于1,标度为this
。
结果以与this
相同的比例存储,因此零和非零值的结果等于[1, this.scale()]
。
this
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.