BigDecimal是不可变的、任意精度的、有符号的、十进制数. git
BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成 |
BigDecimal 表示的数值是 :
unscaledValue × 10的-scale 次幂
|
BigDecimal(BigInteger val) | 将 BigInteger 转换为 BigDecimal |
BigDecimal(BigInteger unscaledVal,int scale)
|
将 BigInteger 非标度值和 int 标度转换为 BigDecimal |
BigDecimal(BigInteger unscaledVal,
int scale,
MathContext mc)
|
将 BigInteger 非标度值和 int 标度转换为 BigDecimal
(根据上下文设置进行舍入)
|
BigDecimal(BigInteger val,MathContext mc)
|
将 BigInteger 转换为 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(double val) | double 转换为 BigDecimal |
BigDecimal(double val, MathContext mc) | double 转换为 BigDecimal 根据上下文设置进行舍入 |
Sign(可选) Significand Exponent opt(可选) |
Sign 符号:
+
-
Significand 有效数字至少要有整数或者小数的一位数字:
IntegerPart .FractionPart 整数和小数
. FractionPart 小数
IntegerPart 整数
IntegerPart:
Digits
FractionPart:
Digits
Exponent: 指数部分
ExponentIndicator SignedInteger
ExponentIndicator: 指数符号
e
E
SignedInteger: 有符号数
Sign(可选的) Digits
Digits:
Digit
Digits Digit
Digit:
Character.isDigit(char) 对其返回 true 的任何字符,如 0、一、2……
|
-1.23E-12 这是一个完整的格式 含有符号 / 含有整数部分 / 含有小数部分 /含有指数部分/指数部分含有符号 |
ROUND_UP
ROUND_DOWN
ROUND_CEILING
ROUND_FLOOR
ROUND_HALF_UP
ROUND_HALF_DOWN
ROUND_HALF_EVEN
ROUND_UNNECESSARY
|
divideToIntegralValue(BigDecimal divisor) | 返回 BigDecimal 值为向下舍入所得商值 (this / divisor) 的整数部分 首选标度为 (this.scale() - divisor.scale()) |
divideToIntegralValue(BigDecimal divisor, MathContext mc) | 返回 BigDecimal 其值为 (this / divisor) 的整数部分 准确商值的整数部分与舍入模式无关 因此舍入模式不影响此方法返回的值 首选标度是 (this.scale() - divisor.scale()) 若是准确商值的整数部分须要的位数多于 mc.precision 则抛出 ArithmeticException |
判断是否相等
与 compareTo 不一样
仅当两个 BigDecimal 对象的值和标度都相等时,此方法才认为它们相等
(所以经过此方法进行比较时,2.0 不等于 2.00)
|
intValue() 转换为 int 丢弃此 BigDecimal 的小数部分 若是生成的 "BigInteger" 太大而不适合用 int 表示,则仅返回 32 位低位字节 此转换会丢失关于此 BigDecimal 值的总大小和精度的信息 |
longValue()
转换为 long
丢弃此 BigDecimal 的小数部分
若是生成的 "BigInteger" 太大
仅返回 64 位低位字节
此转换会丢失关于此 BigDecimal 值的总大小和精度的信息
|
floatValue() 转换为 float 若是BigDecimal 的值太大而不能表示为 float 将其适当地转换为 Float.NEGATIVE_INFINITY 或 Float.POSITIVE_INFINITY 此转换也可能丢失关于 BigDecimal 值精度的信息 |
doubleValue() 转换为 double 若是此 BigDecimal 的数量太大而不能表示为 double 将其适当地转换为 Double.NEGATIVE_INFINITY 或 Double.POSITIVE_INFINITY 转换也可能丢失关于 BigDecimal 值精度的信息 |
BigInteger toBigInteger() 转换为 BigInteger 丢弃此 BigDecimal 的小数部分 此转换会丢失关于 BigDecimal 值的精度信息 |
int hashCode() |
返回此 BigDecimal 的哈希码 数值上相等但标度不一样的两个 BigDecimal 对象(如,2.0 和 2.00)一般没有 相同的哈希码 |
toString() 返回字符串表示形式,若是须要指数,则使用科学记数法
toEngineeringString() 返回字符串表示形式,须要指数时,则使用工程计数法
toPlainString() 返回不带指数字段的此 BigDecimal 的字符串表示形式
|
toString的三个方法根本逻辑是同样的,都是转换为字符串 只不过具体的形式不一样 |
movePointLeft 该值的小数点向左移动 n 位 若是 n 为负数,则该调用等效于 movePointRight(-n) 若是 n 为非负数,则调用仅将 n 添加到该标度 返回的值和标度分别为: ![]() ![]() |
movePointRight 小数点向右移动 n 位 若是 n 为负,则该调用等效于 movePointLeft(-n) 若是 n 为非负数,则该调用仅从该标度减去 n 返回的值和标度分别为: ![]() ![]() |
BigDecimal stripTrailingZeros() 形式转换,数值是相等的 转换为去掉全部尾部的0的形式的数值 800.000去掉全部的0 就是8 准换后为8乘以10的平方 |