代码是一个Java工具类,名为DoubleUtils
,用于提供精确的浮点数运算。它包括以下功能:
- 加法:
add(Double d1, Double d2)
方法,将两个Double
类型的数相加。 - 减法:
sub(Double d1, Double d2)
方法,将两个Double
类型的数相减。 - 乘法:
mul(Double d1, Double d2)
方法,将两个Double
类型的数相乘。 - 除法:
div(Double d1, Double d2)
方法,将两个Double
类型的数相除,并默认保留15位小数。 - 带精度的除法:
div(Double d1, Double d2, int scale)
方法,允许用户指定保留的小数位数。 - 字符串转双精度浮点数:
StrToDouble()
方法,演示了如何将字符串类型的数字转换为Double
类型,并使用DecimalFormat
格式化为保留两位小数的数字。
这个工具类使用了BigDecimal
类来避免Java中double
和float
类型的精度问题。BigDecimal
提供了精确的小数运算功能,非常适合金融和科学计算中需要高精度的场景。
代码中的StrToDouble
方法是一个示例,展示了如何将字符串转换为Double
类型,并格式化输出。这个方法没有返回值,因为它是直接打印结果的。
注意,这段代码中的StrToDouble
方法没有定义返回类型,也没有静态方法的调用方式,因此如果需要在其他地方调用,需要进行一些修改。
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
*/
public class DoubleUtils{
private static final int DEF_DIV_SCALE = 15;
/**
* @Description 两个Double数相加
*
* @param d1
* @param d2
* @return Double
*/
public static Double add(Double d1,Double d2){
BigDecimal b1 = new BigDecimal(d1.toString());
BigDecimal b2 = new BigDecimal(d2.toString());
return b1.add(b2).doubleValue();
}
/**
* @Description 两个Double数相减
*
* @param d1
* @param d2
* @return Double
*/
public static Double sub(Double d1,Double d2){
BigDecimal b1 = new BigDecimal(d1.toString());
BigDecimal b2 = new BigDecimal(d2.toString());
return b1.subtract(b2).doubleValue();
}
/**
* @Description 两个Double数相乘
*
* @param d1
* @param d2
* @return Double
*/
public static Double mul(Double d1,Double d2){
BigDecimal b1 = new BigDecimal(d1.toString());
BigDecimal b2 = new BigDecimal(d2.toString());
return b1.multiply(b2).doubleValue();
}
/**
* @Description 两个Double数相除
*
* @param d1
* @param d2
* @return Double
*/
public static Double div(Double d1,Double d2){
BigDecimal b1 = new BigDecimal(d1.toString());
BigDecimal b2 = new BigDecimal(d2.toString());
return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* @Description 两个Double数相除,并保留scale位小数
*
* @param d1
* @param d2
* @param scale
* @return Double
*/
public static Double div(Double d1,Double d2,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(d1.toString());
BigDecimal b2 = new BigDecimal(d2.toString());
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* @Description String类型小数与Double类型的转换
*/
public static void StrToDouble(){
String str="1234.5678";
double num;
DecimalFormat myformat = new DecimalFormat("#0.00");
num = Double.parseDouble(str);//直接转换为double类型
num = Double.parseDouble(myformat.format(num));//保留2为小数
System.out.println(num);
}
}