标签:数据 方式 string image ext 控制 方法 数字 建议
在Java中,8种基本数据类型并不能表示所有的数字。
整数无法表示比byte最小取值还小的,比long最大取值还大的。
浮点数本身有精度,
这就注定有很多数字用基本类型没有办法表示。
BigInteger用来表示不可变的任意精度的整数。BigDecimal用来表示不可变的、任意精度的有符号十进制数。大数据的运算需要通过对应的方法。
BigInteger类有很多重载的构造方法,但一般采用字符串作为参数,其他类型如int所能表示的数字是有限的,而字符串可以是传入任意位的整数
做加减乘除运算依赖的方法分别是add subtract multiply divide
BigDecimal类也有很多重载的构造方法,但一般都采用字符串作为参数,这样参数结果是可以预知的。
尤其注意不可采用double作为参数的构造方法,因为double本身就是不精确的,导致此构造方法的结果有一定的不可预知性。
如下以double作为参数的构造器,在API中也不建议使用
public BigDecimal(double val)
注:
Double.toString(double)
方法,然后使用 BigDecimal(String)
构造方法,将 double 转换为 String。要获取该结果,请使用 static valueOf(double)
方法。
BigDecima做加减乘除运算依赖的方法也是add subtract multiply divide
但对于浮点数据的除法运算,和整数不同,可能出现无限循环或无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式(无法表示确切的结果的话会抛出异常)
BigDecimal
类使其用户完全控制舍入行为。 如果未指定舍入模式,并且无法表示确切的结果,则抛出异常; 否则,可以通过向操作提供适当的MathContext
对象来进行计算,以选择精度和舍入模式。 在这两种情况下,都提供八种舍入方式来控制舍入。 不建议使用此类中的整数字段(如ROUND_HALF_UP
)表示舍入模式; 应该使用RoundingMode
枚举
的枚举值(如RoundingMode.HALF_UP
)。
标签:数据 方式 string image ext 控制 方法 数字 建议
原文地址:https://www.cnblogs.com/shizunatsu/p/14386008.html