哼丨丿呐 2023-06-10 14:39 采纳率: 0%
浏览 25

java去读excel,公式计算时产生的精度问题

在java读取excel的时候,当遇到计算公式的时候,使用了

FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellValue cellValue = evaluator.evaluate(cell);
System.out.println(cellValue.getNumberValue());

但是这样计算出来之后会有精度问题,比如:A1=720215.5359 B1=1886401.6956198 C1=SUM(A1,B1),这是使用上面计算会得到2606617.2315197997
本质上是因为apache poi读取单元格的时候是double类型,最后计算的时候也会用double类型去相加,double类型相加就出现了精度问题
那这种情况下,我怎么才能去读取到C1精准的值2606617.2315198呢,麻烦哪位帮忙解答一下

  • 写回答

3条回答 默认 最新

  • Answer348 2023-06-10 15:09
    关注

    回答部分参考、引用ChatGpt以便为您提供更准确的答案:

    在Java中读取Excel时,由于使用double类型进行计算可能会引起精度问题。要获取精确的计算结果,可以尝试以下方法:

    1. 使用BigDecimal进行计算:将读取到的数值转换为BigDecimal类型,然后使用BigDecimal提供的方法进行精确计算。示例代码如下:
    BigDecimal value1 = new BigDecimal(cellValue.getNumberValue());
    BigDecimal value2 = new BigDecimal(cellValue2.getNumberValue());
    BigDecimal sum = value1.add(value2);
    System.out.println(sum);
    
    1. 设置单元格格式为文本:在读取Excel时,将涉及计算公式的单元格格式设置为文本格式,这样就可以获取公式的原始文本内容。示例代码如下:
    DataFormatter formatter = new DataFormatter();
    String formula = formatter.formatCellValue(cell);
    System.out.println(formula);
    

    通过设置为文本格式,可以获取公式的原始文本内容,而不是计算后的结果。

    请注意,以上方法仅为常见的解决方案,具体方法可能会因您的代码和需求而有所不同。如果以上方法无法满足您的需求,建议查阅Apache POI的文档或社区讨论,以获取更具体的解决方案。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月10日

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100