Java 使用 BigDecimal 精确小数运算(解决浮点数误差)
// 导入java.math包下的BigDecimal类,用于高精度小数计算
import java.math.BigDecimal;
// 定义公共类,类名必须和文件名一致:CalculateDemo.java
public class CalculateDemo {
// main方法,程序入口,固定写法,程序从这里开始执行
public static void main(String[] args) {
// new BigDecimal("字符串形式数字"),用字符串构造避免double本身的精度丢失
BigDecimal num1 = new BigDecimal("0.000002");
BigDecimal num2 = new BigDecimal("0.000006");
// 调用add()方法,执行加法运算,BigDecimal不可变,运算返回新对象
BigDecimal result = num1.add(num2);
// 输出计算结果
System.out.println("0.000002 + 0.000006 = " + result);
// equals比较两个BigDecimal数值是否完全相等
System.out.println("结果是否等于0.000008:" + result.equals(new BigDecimal("0.000008")));
}
}
逐行详细解释
import java.math.BigDecimal;
import:导入关键字。java.math 是包名,BigDecimal 是高精度数字类。Java 默认不会加载这个类,需要手动导入,否则无法使用。
-
public class CalculateDemo {
public:访问修饰符,表示公开;class:定义类;CalculateDemo是类名。Java 一个.java文件只能有一个 public 类,文件名必须和类名完全相同,大小写也要一致。{}是代码块,包裹类内部所有内容。 -
public static void main(String[] args) {
public:公开;static:静态,不需要创建对象就能运行;void:方法无返回值;main:程序入口方法名称,固定;String[] args:接收命令行传入参数。所有 Java 应用都从 main 方法开始执行,{}包裹方法内代码。 -
BigDecimal num1 = new BigDecimal("0.000002");
BigDecimal:变量类型;num1:变量名。new BigDecimal("文本")创建高精度数字对象。必须传字符串,如果传入 double,double 本身已经带精度误差,就失去意义。 -
BigDecimal num2 = new BigDecimal("0.000006");
同上,创建第二个高精度小数对象。 -
BigDecimal result = num1.add(num2);
add () 是 BigDecimal 内置加法方法。注意:BigDecimal 对象一旦创建,数值不能修改。加法不会改变 num1、num2,计算结果会生成全新 BigDecimal 对象,赋值给 result。
减法:subtract (),乘法:multiply (),除法:divide () -
System.out.println("0.000002 + 0.000006 = " + result);
System.out:标准输出对象;println:打印并自动换行。+在这里是字符串拼接,把文字和 result 的值拼成一整条字符串输出。 -
System.out.println("结果是否等于0.000008:" + result.equals(new BigDecimal("0.000008")));
equals ():BigDecimal 的相等判断方法,比较数值;不能用==,==判断是否为同一个内存对象,不是比较数值。 -
两个
}
分别闭合 main 方法、闭合类
浙公网安备 33010602011771号