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
- 继承
- 属性
- 实现
注解
不可变的任意精度有符号十进制数。 A 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 中定义的算术运算模式广泛兼容(第 7.4 节)。 与这些标准不同, BigDecimal
包括许多舍入模式。 这些 ANSI 标准与 BigDecimal
规范之间的任何冲突都得到解决,以赞成 BigDecimal
。
由于相同的数值可以具有不同的表示形式(具有不同的刻度),因此算术和舍入规则必须同时指定数值结果和结果表示形式中使用的刻度。
相同数值的不同表示形式称为同一 队列的成员。 #compareTo(BigDecimal)自然顺序 BigDecimal
将同一队列的成员视为彼此相等。 相反,该方法 #equals(Object) equals
要求数值和表示形式相同,才能保持相等。 与#scale()
#unscaledValue()
数值相等且具有不同表示形式的方法的结果不同。
一般情况下,舍入模式和精度设置确定当确切结果具有更多位数(在除数和平方根的情况下,可能无限多)而不是返回的数字数时,操作返回结果的位数有限。
首先,要返回的数字总数由 MathContext
's precision
设置指定;这决定了结果的 精度。 数字计数从确切结果的最左侧非零位开始。 舍入模式确定任何丢弃的尾随数字如何影响返回的结果。
对于所有算术运算符,将执行该运算,就像首先计算出确切的中间结果,然后使用所选舍入模式(如有必要),舍入到精度设置指定的位数(如有必要)。 如果未返回确切结果,则会丢弃确切结果的某些数字位置。 舍入会增加返回结果的大小时,可以通过传播到前导“9”数字的携带来创建新的数字位置。 例如,将值 999.9 舍入为三位数,以数字方式等于 100,表示为 100 次;10<sup>1</sup>。 在这种情况下,新的“1”是返回结果的前导位位置。
对于具有 MathContext
参数的方法和构造函数,如果结果不精确,但舍入模式为 RoundingMode#UNNECESSARY UNNECESSARY
,将引发一个 ArithmeticException
。
除了逻辑精确结果之外,每个算术运算还有一个用于表示结果的首选刻度。 下表中列出了每个操作的首选缩放。
<table class=“striped” style=“text-align:left”>caption Arithmetic Operations <结果的首选比例 /caption<>>thead><tr><th scope=“col”>Operation</th><scope=“col”>Preferred Scale of Result</th></tr<>/thead<>tbody<>tr><th scope=“row”>Add</th><td>max(addend.scale(), augend.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
其值是i
BigDecimal
添加到该表达式的值的j
BigDecimal
简写。(i + j)
伪代码表达式是“如果表示与 BigDecimal
i
表示相同的值时,伪代码表达式(i == j)
是速记的BigDecimal
j
。 其他伪代码表达式同样被解释。 方括号用于表示定义BigDecimal
值的特定BigInteger
和刻度对;例如 [19, 2] 的BigDecimal
数值等于 0.19,其小数位数为 2。
当传递null
任何输入参数的对象引用时,此类的所有方法和构造函数都会引发NullPointerException
。
在 1.1 中添加。
适用于 . 的 java.math.BigDecimal
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
构造函数
BigDecimal(BigInteger) |
将 a |
BigDecimal(BigInteger, Int32) |
将 |
BigDecimal(BigInteger, Int32, MathContext) |
将 |
BigDecimal(BigInteger, MathContext) |
根据上下文设置将 a |
BigDecimal(Char[]) |
将字符数组表示形式 |
BigDecimal(Char[], Int32, Int32) |
将字符数组表示形式 |
BigDecimal(Char[], Int32, Int32, MathContext) |
将字符数组表示形式 |
BigDecimal(Char[], MathContext) |
将字符数组表示形式转换为一个 |
BigDecimal(Double) |
将一个 |
BigDecimal(Double, MathContext) |
将 a |
BigDecimal(Int32) |
将 a |
BigDecimal(Int32, MathContext) |
将一个 |
BigDecimal(Int64) |
将 a |
BigDecimal(Int64, MathContext) |
将 a |
BigDecimal(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
BigDecimal(String) |
将 a |
BigDecimal(String, MathContext) |
将 a |
字段
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() |
返回 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) |
不可变的任意精度有符号十进制数。 |