Share via


BigDecimal 类

定义

不可变的任意精度有符号十进制数。

[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
属性
实现

注解

不可变的任意精度有符号十进制数。 由 BigDecimal 任意精度整数 #unscaledValue () 未缩放值 和 32 位整数 #scale () 刻度组成。 如果为零或正数,则刻度是小数点右侧的位数。 如果为负数,则数字的未缩放值将乘以 10 到刻度求反的幂。 因此(unscaledValue &times; 10<sup>-scale</sup>), 表示BigDecimal的数字的值为 。

BigDecimal 提供用于算术、缩放操作、舍入、比较、哈希和格式转换的操作。 方法 #toString 提供 的规范表示形式 BigDecimal

BigDecimal 可让用户完全控制舍入行为。 如果未指定舍入模式,并且无法表示确切的结果,则会引发 ; ArithmeticException 否则,可以通过向运算提供适当的 MathContext 对象,将计算执行到所选的精度和舍入模式。 在任一情况下,都为控制舍入提供了 8 <>个 em 舍入模式</em>。 已弃用此类中的整数字段 (如 #ROUND_HALF_UP) 来表示舍入模式;应改用) (RoundingMode#HALF_UP 的枚举值RoundingModeenum

例如, 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()方法的结果将因数值相等而不同,表示形式不同。

一般情况下,舍入模式和精度设置确定当确切结果的位数多 (在除数和平方根) 比返回的位数多时,操作返回结果的方式有限。

首先,要返回的总数由 MathContextprecision 设置指定;这决定了结果的 精度。 数字计数从确切结果的最左侧非零位开始。 舍入模式确定任何丢弃的尾随数字如何影响返回的结果。

对于所有算术运算符,将执行运算,就像先计算一个确切的中间结果,然后舍入为精度设置指定的位数 (,如有必要,使用所选舍入模式) 。 如果未返回确切结果,则会丢弃确切结果的一些数字位置。 当舍入增加返回结果的量级时,可以通过传播到前导“9”位的携带来创建新的数字位置。 例如,将值 999.9 舍入为三位数字,在数字上等于 1000&次;10<sup>1</sup>。 在这种情况下,新的“1”是返回结果的前导数字位置。

对于具有 MathContext 参数的方法和构造函数,如果结果不精确,但舍入模式为 RoundingMode#UNNECESSARY UNNECESSARYArithmeticException 则将引发 。

除了逻辑精确结果外,每个算术运算都有表示结果的首选比例。 下表列出了每个操作的首选比例。

<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/320.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其值是 BigDecimali 添加到 的BigDecimalj的 的 的简写。(i + j) 伪代码表达式是 “true如果 且仅当 BigDecimali 表示与 相同的值jBigDecimal时,(i == j) 其他伪代码表达式的解释方式类似。 方括号用于表示定义BigDecimal值的特定BigInteger和刻度对;例如,[19, 2] 在BigDecimal数字上等于 0.19,其刻度为 2。

为任何输入参数传递null对象引用时,此类的所有方法和构造函数都会引发NullPointerException

在 1.1 中添加。

java.math.BigDecimalJava 文档。

此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。

构造函数

BigDecimal(BigInteger)

BigInteger 转换为 BigDecimal

BigDecimal(BigInteger, Int32)

BigInteger 未缩放的值和 int 刻度转换为 BigDecimal

BigDecimal(BigInteger, Int32, MathContext)

BigInteger将未缩放的值和int小数位数转换为 ,BigDecimal并根据上下文设置进行舍入。

BigDecimal(BigInteger, MathContext)

BigInteger根据上下文设置将 转换为BigDecimal舍入。

BigDecimal(Char[])

将 的 BigDecimal 字符数组表示形式转换为 BigDecimal,接受与构造函数相同的字符 #BigDecimal(String) 序列。

BigDecimal(Char[], Int32, Int32)

将 的 BigDecimal 字符数组表示形式转换为 BigDecimal,接受与构造函数相同的字符 #BigDecimal(String) 序列,同时允许指定子数组。

BigDecimal(Char[], Int32, Int32, MathContext)

将 的 BigDecimal 字符数组表示形式转换为 BigDecimal,接受与构造函数相同的字符 #BigDecimal(String) 序列,同时允许指定子数组并根据上下文设置进行舍入。

BigDecimal(Char[], MathContext)

将 的 BigDecimal 字符数组表示形式转换为 BigDecimal,接受与构造函数相同的字符 #BigDecimal(String) 序列,并根据上下文设置进行舍入。

BigDecimal(Double)

double 转换为 , BigDecimal 它是 的二进制浮点值的精确十进制表示形式 double

BigDecimal(Double, MathContext)

double将 转换为 ,BigDecimal并根据上下文设置进行舍入。

BigDecimal(Int32)

int 转换为 BigDecimal

BigDecimal(Int32, MathContext)

int 转换为 , BigDecimal并根据上下文设置进行舍入。

BigDecimal(Int64)

long 转换为 BigDecimal

BigDecimal(Int64, MathContext)

long将 转换为 ,BigDecimal并根据上下文设置进行舍入。

BigDecimal(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

BigDecimal(String)

将 的 BigDecimal 字符串表示形式转换为 BigDecimal

BigDecimal(String, MathContext)

将 的BigDecimalBigDecimal字符串表示形式转换为 ,接受与构造函数相同的字符串#BigDecimal(String),并根据上下文设置进行舍入。

字段

RoundCeiling

舍入模式,以向正无穷大舍入。

RoundDown

舍入模式以向零舍入。

RoundFloor

要向负无穷大舍入的舍入模式。

RoundHalfDown

舍入模式以向“最近的邻居”舍入,除非两个邻居都相等,在这种情况下向下舍入。

RoundHalfEven

舍入模式以向“最近的邻居”舍入,除非两个邻居都相等,在这种情况下,向偶数邻居舍入。

RoundHalfUp

舍入模式以向“最近的邻居”舍入,除非两个邻居都相等,在这种情况下向上舍入。

RoundUnnecessary

舍入模式,用于断言请求的操作具有确切的结果,因此不需要舍入。

RoundUp

舍入模式以从零开始四舍五入。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
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()

返回一个 , BigDecimal 其 值为此 BigDecimal的绝对值,其小数位数为 this.scale()

Abs(MathContext)

返回一个 , BigDecimal 其 值为此 BigDecimal的绝对值,并根据上下文设置进行舍入。

Add(BigDecimal)

返回一个 , BigDecimal 其值为 (this + augend),其小数位数为 max(this.scale(), augend.scale())

Add(BigDecimal, MathContext)

返回其 BigDecimal 值为 (this + augend)的 ,并根据上下文设置进行舍入。

ByteValue()

以 的形式 byte返回指定数字的值。

(继承自 Number)
ByteValueExact()

将此 BigDecimal 转换为 byte,检查丢失的信息。

Clone()

创建并返回此对象的副本。

(继承自 Object)
CompareTo(BigDecimal)

将此 BigDecimal 与指定的 BigDecimal进行比较。

Dispose()

不可变的任意精度有符号十进制数。

(继承自 Object)
Dispose(Boolean)

不可变的任意精度有符号十进制数。

(继承自 Object)
Divide(BigDecimal)

返回一个 BigDecimal ,其值为 (this / divisor),并且其首选小数位数为 (this.scale() - divisor.scale());如果确切的商不能表示 (因为它具有非终止十进制扩展) 引发 。ArithmeticException

Divide(BigDecimal, Int32, RoundingMode)

返回一个 BigDecimal ,其值为 (this / divisor),其小数位数为指定。

Divide(BigDecimal, Int32, RoundOptions)

返回一个 BigDecimal ,其值为 (this / divisor),其小数位数为指定。

Divide(BigDecimal, MathContext)

返回其 BigDecimal 值为 (this / divisor)的 ,并根据上下文设置进行舍入。

Divide(BigDecimal, RoundingMode)

返回一个 , BigDecimal 其值为 (this / divisor),其小数位数为 this.scale()

Divide(BigDecimal, RoundOptions)

返回一个 , BigDecimal 其值为 (this / divisor),其小数位数为 this.scale()

DivideAndRemainder(BigDecimal)

返回一个双元素 BigDecimal 数组,其中包含 的结果 divideToIntegralValue ,后跟两个操作数上 的结果 remainder

DivideAndRemainder(BigDecimal, MathContext)

返回一个双元素 BigDecimal 数组,其中包含 的结果 divideToIntegralValue ,后跟根据上下文设置通过舍入计算的两个操作数上的结果 remainder

DivideToIntegralValue(BigDecimal)

返回一个 , BigDecimal 其值为向下舍入的商 (this / divisor) 的整数部分。

DivideToIntegralValue(BigDecimal, MathContext)

返回一个 , BigDecimal 其值为 的 (this / divisor)整数部分。

DoubleValue()

将此 BigDecimal 转换为 double

Equals(Object)

指示某个其他对象是否“等于”此对象。

(继承自 Object)
FloatValue()

将此 BigDecimal 转换为 float

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
IntValue()

将此 BigDecimal 转换为 int

IntValueExact()

将此 BigDecimal 转换为 int,检查丢失的信息。

JavaFinalize()

当垃圾回收确定不再引用对象时,由垃圾回收器对对象调用。

(继承自 Object)
LongValue()

将此 BigDecimal 转换为 long

LongValueExact()

将此 BigDecimal 转换为 long,检查丢失的信息。

Max(BigDecimal)

返回此 BigDecimalval的最大值。

Min(BigDecimal)

返回此 BigDecimalval的最小值。

MovePointLeft(Int32)

返回一个 , BigDecimal 它等效于小数点向左移动 n 的位置。

MovePointRight(Int32)

返回一个 , BigDecimal 它等效于此小数点向右移动 n

Multiply(BigDecimal)

返回一个 , BigDecimal 其值为 (this &times; multiplicand),其小数位数为 (this.scale() + multiplicand.scale())

Multiply(BigDecimal, MathContext)

返回其 BigDecimal 值为 (this &times; multiplicand)的 ,并根据上下文设置进行舍入。

Negate()

返回一个 , BigDecimal 其值为 (-this),其小数位数为 this.scale()

Negate(MathContext)

返回其 BigDecimal 值为 (-this)的 ,并根据上下文设置进行舍入。

Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
Plus()

返回一个 , BigDecimal 其值为 (+this),其小数位数为 this.scale()

Plus(MathContext)

返回其 BigDecimal 值为 (+this)的 ,并根据上下文设置进行舍入。

Pow(Int32)

返回一个 BigDecimal ,其值为 (this<sup>n</sup>),以无限精度精确计算幂。

Pow(Int32, MathContext)

返回其 BigDecimal 值为 的 (this<sup>n</sup>)

Precision()

返回此 BigDecimal精度

Remainder(BigDecimal)

返回其 BigDecimal 值为 的 (this % divisor)

Remainder(BigDecimal, MathContext)

返回其 BigDecimal 值为 (this % divisor)的 ,并根据上下文设置进行舍入。

Round(MathContext)

根据设置返回 BigDecimal 舍入的 MathContext

Scale()

返回此 BigDecimal刻度

ScaleByPowerOfTen(Int32)

返回一个 BigDecimal,其数值等于 (this * 10<sup>n</sup>) 。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
SetScale(Int32)

返回一个 , BigDecimal 其小数位数为指定值,其值在数值上等于此 BigDecimal的 。

SetScale(Int32, RoundingMode)

返回一个 , BigDecimal 其小数位数为指定值,其未缩放值是通过将此 BigDecimal的未缩放值乘以或除以 10 的相应幂来确定的,以保持其总体值。

SetScale(Int32, RoundOptions)

返回一个 , BigDecimal 其小数位数为指定值,其未缩放值是通过将此 BigDecimal的未缩放值乘以或除以 10 的相应幂来确定的,以保持其总体值。

ShortValue()

以 的形式 short返回指定数字的值。

(继承自 Number)
ShortValueExact()

将此 BigDecimal 转换为 short,检查丢失的信息。

Signum()

返回此 BigDecimal的 signum 函数。

Sqrt(MathContext)

返回的平方根 this 的近似值,并根据上下文设置进行舍入。

StripTrailingZeros()

返回一个 , BigDecimal 该值在数值上等于此一个,但从表示形式中删除了任何尾随零。

Subtract(BigDecimal)

返回一个 , BigDecimal 其值为 (this - subtrahend),其小数位数为 max(this.scale(), subtrahend.scale())

Subtract(BigDecimal, MathContext)

返回其 BigDecimal 值为 (this - subtrahend)的 ,并根据上下文设置进行舍入。

ToArray<T>()

不可变的任意精度有符号十进制数。

(继承自 Object)
ToBigInteger()

将此 BigDecimal 转换为 BigInteger

ToBigIntegerExact()

将此 BigDecimal 转换为 BigInteger,检查丢失的信息。

ToEngineeringString()

返回此 BigDecimal的字符串表示形式,如果需要指数,则使用工程表示法。

ToPlainString()

返回不带指数字段的字符串 BigDecimal 表示形式。

ToString()

返回对象的字符串表示形式。

(继承自 Object)
Ulp()

返回此 BigDecimal的 ulp(位于最后一个位置的单位)的大小。

UnregisterFromRuntime()

不可变的任意精度有符号十进制数。

(继承自 Object)
UnscaledValue()

返回一个 ,BigInteger其值为此 BigDecimal未缩放值

ValueOf(Double)

double使用 double方法提供的 Double#toString(double) 规范字符串表示形式将 转换为 BigDecimal

ValueOf(Int64)

将值 long 转换为 BigDecimal 刻度为零的 。

ValueOf(Int64, Int32)

long 未缩放的值和 int 刻度转换为 BigDecimal

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)

不可变的任意精度有符号十进制数。

适用于