BigDecimal 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
不可变的任意精度有符号十进制数。
[Android.Runtime.Register("java/math/BigDecimal", DoNotGenerateAcw=true)]
public class BigDecimal : Java.Lang.Number, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IComparable
[<Android.Runtime.Register("java/math/BigDecimal", DoNotGenerateAcw=true)>]
type BigDecimal = class
inherit Number
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface IComparable
- 继承
- 属性
- 实现
注解
不可变的任意精度有符号十进制数。 由 BigDecimal
任意精度整数 #unscaledValue () 未缩放值 和 32 位整数 #scale () 刻度组成。 如果为零或正数,则刻度是小数点右侧的位数。 如果为负数,则数字的未缩放值将乘以 10 到刻度求反的幂。 因此(unscaledValue × 10<sup>-scale</sup>)
, 表示BigDecimal
的数字的值为 。
类 BigDecimal
提供用于算术、缩放操作、舍入、比较、哈希和格式转换的操作。 方法 #toString
提供 的规范表示形式 BigDecimal
。
类 BigDecimal
可让用户完全控制舍入行为。 如果未指定舍入模式,并且无法表示确切的结果,则会引发 ; ArithmeticException
否则,可以通过向运算提供适当的 MathContext
对象,将计算执行到所选的精度和舍入模式。 在任一情况下,都为控制舍入提供了 8 <>个 em 舍入模式</em>。 已弃用此类中的整数字段 (如 #ROUND_HALF_UP
) 来表示舍入模式;应改用) (RoundingMode#HALF_UP
的枚举值RoundingMode
enum
。
例如, MathContext
当为对象提供精度设置为 0 (时, MathContext#UNLIMITED
) ,算术运算和不 MathContext
采用任何对象的算术方法一样精确。 作为计算确切结果的必然结果,不使用精度设置为 0 的 MathContext
对象的舍入模式设置,因此不相关。 在除数的情况下,确切的商可能具有无限长的十进制扩展:例如,1 除以 3。 如果商具有非确定性十进制扩展,并且指定运算以返回确切结果, ArithmeticException
则会引发 。 否则,将返回除法的确切结果,就像对其他操作一样。
当精度设置不为 0 时,算术规则 BigDecimal
与 ANSI X3.274-1996 和 ANSI X3.274-1996/AM 1-2000 (第 7.4 节) 中定义的算术操作模式广泛兼容。 与这些标准不同, BigDecimal
包括许多舍入模式。 解决这些 ANSI 标准和 BigDecimal
规范之间的任何冲突,有利于 BigDecimal
。
由于同一数值可以具有不同的表示形式 (具有不同刻度) ,因此算术和舍入规则必须指定数值结果和结果表示中使用的刻度。
相同数值的不同表示形式称为同一 队列的成员。 #compareTo (BigDecimal) 自然顺序 BigDecimal
认为同一队列的成员彼此相等。 相反, #equals(Object) equals
方法要求数值和表示形式都相同才能保持相等。 和 等#scale()
#unscaledValue()
方法的结果将因数值相等而不同,表示形式不同。
一般情况下,舍入模式和精度设置确定当确切结果的位数多 (在除数和平方根) 比返回的位数多时,操作返回结果的方式有限。
首先,要返回的总数由 MathContext
的 precision
设置指定;这决定了结果的 精度。 数字计数从确切结果的最左侧非零位开始。 舍入模式确定任何丢弃的尾随数字如何影响返回的结果。
对于所有算术运算符,将执行运算,就像先计算一个确切的中间结果,然后舍入为精度设置指定的位数 (,如有必要,使用所选舍入模式) 。 如果未返回确切结果,则会丢弃确切结果的一些数字位置。 当舍入增加返回结果的量级时,可以通过传播到前导“9”位的携带来创建新的数字位置。 例如,将值 999.9 舍入为三位数字,在数字上等于 1000&次;10<sup>1</sup>。 在这种情况下,新的“1”是返回结果的前导数字位置。
对于具有 MathContext
参数的方法和构造函数,如果结果不精确,但舍入模式为 RoundingMode#UNNECESSARY UNNECESSARY
, ArithmeticException
则将引发 。
除了逻辑精确结果外,每个算术运算都有表示结果的首选比例。 下表列出了每个操作的首选比例。
<table class=“striped” style=“text-align:left”>描述文字计算运算<结果 /描述文字><thead><tr><th scope=“col”>Operation</th><th scope=“col”Result<></>tr<>/thead<>tbody<>tr><th scope=“row”>Add</th><td>max (addend.scale () , augend.scale (><) ) </td><tr><th scope=“row”>Subtract</th><td>max (minuend.scale () , subtrahend.scale () ) </td<>tr><th scope=“row”>Multiply</th><td>multiplier.scale () + multiplicand.scale () </td><tr><th scope=“row”>Divide</th><td>dividend.scale () - divisor.scale () </td<>tr><th scope=“row”>Square root</th><td>radicand.scale () /2</td<>/tbody></table>
这些刻度是返回确切算术结果的方法使用的刻度;不同之处在于,精确除法可能必须使用更大的刻度,因为确切的结果可能具有更多的数字。 例如,1/32
为 0.03125
。
在舍入之前,逻辑精确中间结果的刻度是该操作的首选刻度。 如果确切的数字结果不能以数字表示 precision
,舍入将选择要返回的数字集,并且结果的比例将从中间结果的刻度减少到可以表示 precision
实际返回的数字的最小小数位数。 如果确切的结果最多可以使用位数表示 precision
,则返回与首选刻度最接近的结果表示形式。 具体而言,通过删除尾随零并减小刻度,可以以少于 precision
位数表示完全可表示的商。 例如,使用 RoundingMode#FLOOR 地板舍入模式舍入到三位数字, <br>
19/100 = 0.19 // integer=19, scale=2
<Br>
但<br>
21/110 = 0.190 // integer=190, scale=3
<Br>
请注意,对于加、减和乘,小数位数的减少将等于丢弃的确切结果的位数位置数。 如果舍入导致携带传播创建新的高阶数字位置,则会放弃结果的附加数字,而不是未创建新数字位置时。
其他方法可能具有略有不同的舍入语义。 例如,使用 #pow (int,MathContext) 指定算法的方法的结果 pow
有时与舍入数学结果不同,在最后一个位置,一个 #ulp () ulp。
提供了两种类型的运算用于操作缩放 BigDecimal
:缩放/舍入运算和小数点运动运算。 缩放/舍入运算 (#setScale setScale
和 #round round
) 返回一个 BigDecimal
,其值大约 (或完全) 等于操作数的值,但其刻度或精度是指定值;也就是说,它们增加或减少存储数字的精度,对其值的影响最小。 小数点运动操作 (#movePointLeft movePointLeft
, #movePointRight movePointRight
) 通过将小数点在指定方向上移动指定距离来返回 BigDecimal
从操作数创建的 。
作为 32 位整数,刻度的值集很大,但有边界。 如果结果的刻度超出 32 位整数的范围(溢出或下溢),则操作可能会引发 ArithmeticException
。
为简洁起见,在方法的整个说明 BigDecimal
中使用伪代码。 伪代码表达式是 “BigDecimal
其值是 BigDecimal
i
添加到 的BigDecimal
j
的 的 的简写。(i + j)
伪代码表达式是 “true
如果 且仅当 BigDecimal
i
表示与 相同的值j
BigDecimal
时,(i == j)
其他伪代码表达式的解释方式类似。 方括号用于表示定义BigDecimal
值的特定BigInteger
和刻度对;例如,[19, 2] 在BigDecimal
数字上等于 0.19,其刻度为 2。
为任何输入参数传递null
对象引用时,此类的所有方法和构造函数都会引发NullPointerException
。
在 1.1 中添加。
的 java.math.BigDecimal
Java 文档。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
构造函数
BigDecimal(BigInteger) |
将 |
BigDecimal(BigInteger, Int32) |
将 |
BigDecimal(BigInteger, Int32, MathContext) |
|
BigDecimal(BigInteger, MathContext) |
|
BigDecimal(Char[]) |
将 的 |
BigDecimal(Char[], Int32, Int32) |
将 的 |
BigDecimal(Char[], Int32, Int32, MathContext) |
将 的 |
BigDecimal(Char[], MathContext) |
将 的 |
BigDecimal(Double) |
将 |
BigDecimal(Double, MathContext) |
|
BigDecimal(Int32) |
将 |
BigDecimal(Int32, MathContext) |
将 |
BigDecimal(Int64) |
将 |
BigDecimal(Int64, MathContext) |
|
BigDecimal(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
BigDecimal(String) |
将 的 |
BigDecimal(String, MathContext) |
将 的 |
字段
RoundCeiling |
舍入模式,以向正无穷大舍入。 |
RoundDown |
舍入模式以向零舍入。 |
RoundFloor |
要向负无穷大舍入的舍入模式。 |
RoundHalfDown |
舍入模式以向“最近的邻居”舍入,除非两个邻居都相等,在这种情况下向下舍入。 |
RoundHalfEven |
舍入模式以向“最近的邻居”舍入,除非两个邻居都相等,在这种情况下,向偶数邻居舍入。 |
RoundHalfUp |
舍入模式以向“最近的邻居”舍入,除非两个邻居都相等,在这种情况下向上舍入。 |
RoundUnnecessary |
舍入模式,用于断言请求的操作具有确切的结果,因此不需要舍入。 |
RoundUp |
舍入模式以从零开始四舍五入。 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
JniIdentityHashCode |
不可变的任意精度有符号十进制数。 (继承自 Object) |
JniPeerMembers |
不可变的任意精度有符号十进制数。 |
One |
值 1,小数位数为 0。 |
PeerReference |
不可变的任意精度有符号十进制数。 (继承自 Object) |
Ten |
值 10,小数位数为 0。 |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
Zero |
值 0,刻度为 0。 |
方法
Abs() |
返回一个 , |
Abs(MathContext) |
返回一个 , |
Add(BigDecimal) |
返回一个 , |
Add(BigDecimal, MathContext) |
返回其 |
ByteValue() |
以 的形式 |
ByteValueExact() |
将此 |
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
CompareTo(BigDecimal) |
将此 |
Dispose() |
不可变的任意精度有符号十进制数。 (继承自 Object) |
Dispose(Boolean) |
不可变的任意精度有符号十进制数。 (继承自 Object) |
Divide(BigDecimal) |
返回一个 |
Divide(BigDecimal, Int32, RoundingMode) |
返回一个 |
Divide(BigDecimal, Int32, RoundOptions) |
返回一个 |
Divide(BigDecimal, MathContext) |
返回其 |
Divide(BigDecimal, RoundingMode) |
返回一个 , |
Divide(BigDecimal, RoundOptions) |
返回一个 , |
DivideAndRemainder(BigDecimal) |
返回一个双元素 |
DivideAndRemainder(BigDecimal, MathContext) |
返回一个双元素 |
DivideToIntegralValue(BigDecimal) |
返回一个 , |
DivideToIntegralValue(BigDecimal, MathContext) |
返回一个 , |
DoubleValue() |
将此 |
Equals(Object) |
指示某个其他对象是否“等于”此对象。 (继承自 Object) |
FloatValue() |
将此 |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
IntValue() |
将此 |
IntValueExact() |
将此 |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由垃圾回收器对对象调用。 (继承自 Object) |
LongValue() |
将此 |
LongValueExact() |
将此 |
Max(BigDecimal) |
返回此 |
Min(BigDecimal) |
返回此 |
MovePointLeft(Int32) |
返回一个 , |
MovePointRight(Int32) |
返回一个 , |
Multiply(BigDecimal) |
返回一个 , |
Multiply(BigDecimal, MathContext) |
返回其 |
Negate() |
返回一个 , |
Negate(MathContext) |
返回其 |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
Plus() |
返回一个 , |
Plus(MathContext) |
返回其 |
Pow(Int32) |
返回一个 |
Pow(Int32, MathContext) |
返回其 |
Precision() |
返回此 |
Remainder(BigDecimal) |
返回其 |
Remainder(BigDecimal, MathContext) |
返回其 |
Round(MathContext) |
根据设置返回 |
Scale() |
返回此 |
ScaleByPowerOfTen(Int32) |
返回一个 BigDecimal,其数值等于 ( |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
SetScale(Int32) |
返回一个 , |
SetScale(Int32, RoundingMode) |
返回一个 , |
SetScale(Int32, RoundOptions) |
返回一个 , |
ShortValue() |
以 的形式 |
ShortValueExact() |
将此 |
Signum() |
返回此 |
Sqrt(MathContext) |
返回的平方根 |
StripTrailingZeros() |
返回一个 , |
Subtract(BigDecimal) |
返回一个 , |
Subtract(BigDecimal, MathContext) |
返回其 |
ToArray<T>() |
不可变的任意精度有符号十进制数。 (继承自 Object) |
ToBigInteger() |
将此 |
ToBigIntegerExact() |
将此 |
ToEngineeringString() |
返回此 |
ToPlainString() |
返回不带指数字段的字符串 |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
Ulp() |
返回此 |
UnregisterFromRuntime() |
不可变的任意精度有符号十进制数。 (继承自 Object) |
UnscaledValue() |
返回一个 , |
ValueOf(Double) |
|
ValueOf(Int64) |
将值 |
ValueOf(Int64, Int32) |
将 |
Wait() |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<> (继承自 Object) |
Wait(Int64) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
显式接口实现
IComparable.CompareTo(Object) |
不可变的任意精度有符号十进制数。 |
IJavaPeerable.Disposed() |
不可变的任意精度有符号十进制数。 (继承自 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
不可变的任意精度有符号十进制数。 (继承自 Object) |
IJavaPeerable.Finalized() |
不可变的任意精度有符号十进制数。 (继承自 Object) |
IJavaPeerable.JniManagedPeerState |
不可变的任意精度有符号十进制数。 (继承自 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
不可变的任意精度有符号十进制数。 (继承自 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
不可变的任意精度有符号十进制数。 (继承自 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
不可变的任意精度有符号十进制数。 (继承自 Object) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
不可变的任意精度有符号十进制数。 |
GetJniTypeName(IJavaPeerable) |
不可变的任意精度有符号十进制数。 |