【Java SE】BigDecimal
在实际开发中,如果基本的浮点数精度不足以满足需求,则可以使用java.math
包中提供的BigDecimal
类,这个类可以处理包含任意长度数字序列的数值。BigDecimal
类实现了任意精度的浮点数运算。
一、类的使用
(1)大数与普通数转换
将普通数转成大数时,可使用静态valueOf
方法。对于更长的数,可使用带字符串参数的构造器。
// 普通数 -> 大数
BigDecimal num0 = BigDecimal.valueOf(100.01);
BigDecimal num1 = new BigDecimal("10000.01");
将BigDecimal
转换为普通的整数类型(如float
、double
等),可以使用相应的转换方法。需要注意的是,如果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)!