You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中BigDecimal multiply()方法精度丢失问题及精准求解

Java BigDecimal乘法精度丢失问题解决方法

问题场景

我尝试解决Java中使用BigDecimal multiply()时的精度丢失问题,以下是示例代码:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class HelloWorld{

 public static void main(String []args){
 
     double result = 0;
     NumberFormat formatter = new DecimalFormat("0.####################");
     formatter.setGroupingUsed(true);
 
     //10000000000
     //17911250000
     String strRt = formatter.format(10000000000.0);
     String strIrt = formatter.format(17911250000.0);
 
     System.out.println(strRt);
     System.out.println(strIrt);
 
     result = new BigDecimal(strRt).multiply(new BigDecimal(strIrt)).doubleValue();
 
    System.out.println(formatter.format(result));
 }

}

预期输出

10000000000
17911250000
179112500000000000000

实际输出

10000000000
17911250000
179112499999999980000

解决方法

问题出在将BigDecimal结果转成double的步骤——double类型的精度有限,无法准确存储超大整数,导致精度丢失。要保持计算精准,全程用BigDecimal处理,最后直接输出BigDecimal对象或转成字符串,不要转成double。

修改后的代码示例:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class HelloWorld{

 public static void main(String []args){
 
     NumberFormat formatter = new DecimalFormat("0.####################");
     formatter.setGroupingUsed(true);
 
     //10000000000
     //17911250000
     String strRt = formatter.format(10000000000.0);
     String strIrt = formatter.format(17911250000.0);
 
     System.out.println(strRt);
     System.out.println(strIrt);
 
     // 直接用BigDecimal存储结果,避免转double
     BigDecimal result = new BigDecimal(strRt).multiply(new BigDecimal(strIrt));
     // 直接输出BigDecimal原生值
     System.out.println(result);
     // 如需格式化输出,直接用formatter处理BigDecimal
     System.out.println(formatter.format(result));
 }

}

关键说明

  • BigDecimal专为高精度计算设计,只要不转成double/float这类精度有限的浮点类型,就能保证计算结果完全精准。
  • 原始代码中doubleValue()是精度丢失的核心原因:double的存储机制无法覆盖所有超大整数,会自动做近似处理。

内容的提问来源于stack exchange,提问作者yoyoyoni1004gmailcom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:52:48