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

注解

不可变的任意精度有符号十进制数。 A 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 中定义的算术运算模式广泛兼容(第 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/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其值是iBigDecimal添加到该表达式的值的jBigDecimal简写。(i + j) 伪代码表达式是“如果表示与 true> 相同的值,则为”如果和仅当BigDecimali表示相同的值时,伪代码表达式(i == j)是速记的BigDecimalj。 其他伪代码表达式同样被解释。 方括号用于表示定义BigDecimal值的特定BigInteger和刻度对;例如 [19, 2] 的BigDecimal数值等于 0.19,其小数位数为 2。

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

在 1.1 中添加。

适用于 . 的 java.math.BigDecimalJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

构造函数

BigDecimal(BigInteger)

将 a BigInteger 转换为 .BigDecimal

BigDecimal(BigInteger, Int32)

BigInteger 未缩放的值和 int 刻度转换为 < a0/> BigDecimal

BigDecimal(BigInteger, Int32, MathContext)

BigInteger未缩放的值和刻度转换为一个intBigDecimal,并根据上下文设置进行舍入。

BigDecimal(BigInteger, MathContext)

根据上下文设置将 a 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)

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

BigDecimal(Double)

将一个 double 转换为一个 BigDecimal ,这是 's binary floating-point 值的确切十进制表示形式 double

BigDecimal(Double, MathContext)

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

BigDecimal(Int32)

将 a int 转换为 .BigDecimal

BigDecimal(Int32, MathContext)

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

BigDecimal(Int64)

将 a long 转换为 .BigDecimal

BigDecimal(Int64, MathContext)

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

BigDecimal(IntPtr, JniHandleOwnership)

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

BigDecimal(String)

将 a BigDecimalBigDecimal的字符串表示形式转换为 .

BigDecimal(String, MathContext)

将 a BigDecimal 的字符串表示形式转换为接受 BigDecimal#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)

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

DivideAndRemainder(BigDecimal, MathContext)

返回一个包含后跟两个操作数的结果divideToIntegralValueremainder的双元素BigDecimal数组,这些操作数根据上下文设置进行舍入计算。

DivideToIntegralValue(BigDecimal)

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

DivideToIntegralValue(BigDecimal, MathContext)

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

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)

返回此 BigDecimal 最大值和 val

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)

根据设置返回舍BigDecimalMathContext入。

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的符号函数。

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()

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

UnregisterFromRuntime()

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

(继承自 Object)
UnscaledValue()

返回BigInteger其值为BigDecimal值的未缩放值

ValueOf(Double)

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

ValueOf(Int64)

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

ValueOf(Int64, Int32)

long 未缩放的值和 int 刻度转换为 < a0/> 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)

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

适用于