自学内容网 自学内容网

【Java SE】BigDecimal

在实际开发中,如果基本的浮点数精度不足以满足需求,则可以使用java.math包中提供的BigDecimal类,这个类可以处理包含任意长度数字序列的数值。BigDecimal类实现了任意精度的浮点数运算。

一、类的使用

(1)大数与普通数转换

将普通数转成大数时,可使用静态valueOf方法。对于更长的数,可使用带字符串参数的构造器。

// 普通数 -> 大数
BigDecimal num0 = BigDecimal.valueOf(100.01);
BigDecimal num1 = new BigDecimal("10000.01");

BigDecimal转换为普通的整数类型(如floatdouble等),可以使用相应的转换方法。需要注意的是,如果BigDecimal的值超出了目标类型的范围,会导致数据丢失或溢出。

BigDecimal num = new BigDecimal("123.456");

// 转换为 float 类型
float floatValue = num.floatValue();

// 转换为 double 类型
double doubleValue = num.doubleValue();

// 转换为 String 类型
String stringValue = num.toString();

(2)大数运算

Java中,不能使用算术运算符(如+*等)来组合大数,而需要使用大数类中的add等方法。另外,除法提供了两个方法,分别是BigDecimal divide(BigDecimal other)BigDecimal divide(BigDecimal other, RoundingMode mode),当商是一个无限小数时,使用前者会抛出异常,要得到舍入结果可使用后者。第二个参数传入Rounding.HALF_UP参数可进行四舍五入。

BigDecimal a = new BigDecimal("1");
BigDecimal b = new BigDecimal("2");

// +
BigDecimal add = a.add(b);
System.out.println(add);

// -
BigDecimal subtract = a.subtract(b);
System.out.println(subtract);

// *
BigDecimal multiply = a.multiply(b);
System.out.println(multiply);

// /
BigDecimal divide = a.divide(b);
System.out.println(divide);

// / 四舍五入
BigDecimal divide1 = a.divide(b, RoundingMode.HALF_UP);
System.out.println(divide1);

使用细节

(1)在使用BigDecimal进行运算时,需要使用对应的方法,不能直接使用运算符。

(2)Java不能通过编程实现运算符重载。

(3)当商是一个无限小数时,使用带RoundingMode参数的divide不会抛出异常。


原文地址:https://blog.csdn.net/zzy_NIC/article/details/143566105

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!