按照人们阅读Excel习惯来格式化BigDecimal

1、环境/问题描述

使用springboot发送邮件(附件)的方式将月度报表发送给领导查阅,数据是准确的,领导基本满意。

就是对一些数字的格式化提出了改进建议,比如不要让大数字自动转为科学计数法、浮点数小数点后都是0就不要带出来,根据某列的数值(0-100之间)设置单元格的底色,小于60的标深红色、大于等于60小于70标浅红色,大于等于70小于等于80标浅绿色,大于等于80小于90标中绿色,大于等于90的标深绿色。

2、分析/排查问题

1) 科学计算法的问题

经常,发现数字的长度超过8位Excel才会将次单元格中的值进行科学计算法转换,解决办法就是判断数字的长度,然后设置单元格存储的值类型

2) 浮点数小数点后都是0就不要带出来

数据表中的字段类型设置的是decimal(12,4),存储的值就是预期值,无小数位的就是证书、带小数位的小数位必定不全为0,只是通过mybatis-plus读取出来映射到Java Bean时自动将数字格式化为必定带4位小数,小数位无值则用0填充了

3) 根据某列的数值(0-100之间)设置单元格的底色

可以根据该单元格的数值大小根据规则进行设置色值,通过poi提供的方式给单元格设置底色

3、解决问题

1) 科学计算法的问题
String s = o.toString();
// 当数字类型长度超过8位时,改为字符串类型显示(Excel数字超过一定长度会显示为科学计数法)
if ( isNumeric( o ) && s.length() < 8 ) {
	cell.setCellType( CellType.NUMERIC );
	cell.setCellValue( Double.parseDouble( s ) );
	return CELL_OTHER;
} else {
	cell.setCellType( CellType.STRING );
	cell.setCellValue( s );
}
2) 浮点数小数点后都是0就不要带出来
public class BigDecimalFormatter {

    public static String format(BigDecimal number) {
        return format(number,5);
    }

    /**
     * 格式化BigDecimal
     * @param number 要处理的数字
     * @param newScale 保留的小数位
     * @return
     */
    public static String format(BigDecimal number,int newScale) {
        // 设置小数点后最多保留位位数(可以根据需要调整),并四舍五入
        BigDecimal formatted = number.setScale(newScale, RoundingMode.HALF_UP);

        // 再次移除尾随的零
        BigDecimal stripped = formatted.stripTrailingZeros();

        // 如果 scale 是负数或 0,则说明没有小数部分
        if (stripped.scale() <= 0) {
            return stripped.toBigInteger().toString(); // 返回整数部分
        } else {
            return stripped.toString(); // 包含小数部分
        }
    }

    public static String format2(BigDecimal number) {
        return number.stripTrailingZeros().toPlainString();
    }

    public static void main(String[] args) {
        System.out.println(format(new BigDecimal("123.000")));
        System.out.println(format(new BigDecimal("123.456")));
        System.out.println(format(new BigDecimal("123.00100")));
        System.out.println(format2(new BigDecimal("123.000")));
        System.out.println(format2(new BigDecimal("123.456")));
        System.out.println(format2(new BigDecimal("123.00100")));
    }
}
/**
 * 输出以下内容格式
 123
123.456
123.001
123
123.456
123.001
 */
3) 根据某列的数值(0-100之间)设置单元格的底色
String hexColorStr = "十六进制色值";
XSSFColor xssfColor = new XSSFColor();
xssfColor.setARGBHex( hexColorStr );
cellStyle.setFillForegroundColor( xssfColor );
cellStyle.setFillBackgroundColor( xssfColor );
cellStyle.setFillPattern( FillPatternType.SOLID_FOREGROUND );
// 设置样式
cell.setCellStyle( cellStyle );

至此,问题得到解决,此处记录一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/946239.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:谱分解、SVD与PCA在算法中的应用与实现

特征值分解&#xff08;EVD&#xff09;、奇异值分解&#xff08;SVD&#xff09;和主成分分析&#xff08;PCA&#xff09;是矩阵分解技术的三种重要形式&#xff0c;它们在人工智能中扮演了关键角色。随着数据维度的快速增长和信息复杂度的提升&#xff0c;这些技术为处理高维…

连接Milvus

连接到Milvus 验证Milvus服务器正在侦听哪个本地端口。将容器名称替换为您自己的名称。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用浏览器访问连接地址htt…

记录一个我在idea启动时的报错

这几天我的idea突然就不能用了我就想着下一个新的&#xff0c;但是却一直报错报错内容如下 这个是我在网上截的pycharm的。 我在网上查了很多方法都不能用&#xff0c;今天重写安装发现我点了关联.java 和.pom和创建环境变量 这几个只需要创建一个快捷方式就行。我重新安装之…

使用maven-mvnd替换maven大大提升编译打包速度

先上结论&#xff01;&#xff01;&#xff01; 多模块清理并打包提升&#xff1a;约3.5倍 多模块不清理打包提升&#xff1a;约5.5倍 单模块提升&#xff1a;约2倍 从计算结果来看&#xff0c;多模块提升的效率更高。在使用mvnd package打包多模块式&#xff0c;可在控制台…

【从零开始入门unity游戏开发之——C#篇43】C#补充知识——值类型和引用类型汇总补充、变量的生命周期与性能优化、值类型和引用类型组合使用

文章目录 一、值类型和引用类型汇总补充1、值类型和引用类型汇总2、值类型和引用类型的区别3、简单的判断值类型和引用类型 二、变量的生命周期与性能优化1、**栈和堆的区别**2、**变量生命周期**3、**垃圾回收&#xff08;GC&#xff09;机制**4、**代码示例与优化**4.1. 临时…

65.基于SpringBoot + Vue实现的前后端分离-阿博图书馆管理系统(项目 + 论文PPT)

项目介绍 随着社会的发展&#xff0c;计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机&#xff0c;通过对图书借阅等信息进行管理。减少管理员的工作&#xff0c;同时也方便广大用户对所需图书借阅信息的及时查询以及管理。 本站…

系统报错:由于找不到msvcp140.dll msvcp140_1.dll无法继续执行问题解决

Java资深小白&#xff0c;不足之处&#xff0c;或者有任何错误欢迎指出。 --蓝紫电脑重装后安装mysql&#xff0c;在执行时mysqld -install时出现系统报错:由于找不到msvcp140.dll无法继续执行、由于找不到msvcp140_1.dll无法继续执行。 尝试了其他博主提出的解决方案要么无效…

【再谈设计模式】策略模式 ~ 算法与行为的灵活调度员

本章内容思维导图&#xff1a; ​ 一、引言 在软件工程&#xff0c;软件开发过程中&#xff0c;我们常常会遇到这样的情况&#xff1a;需要根据不同的条件或者用户输入来执行不同的算法或者操作流程。例如&#xff0c;在一个电商系统中&#xff0c;根据用户的会员等级&#xff…

019-spring-基于aop的事务控制原理

1、事务配置&#xff1a; <tx:annotation-driven transaction-manager"transactionManager"/> transaction-manager 默认是找这个bean&#xff1a;transactionManager 2、从命名空间开始找到对应的解析配置如下&#xff1a; 对应的是这个 后续跟源码没有搞明…

Cursor登录按钮点击没反应

问题 系统&#xff1a;Windows11 Cursor&#xff1a;Cursor 0.44.9 当安装Cursor打开进行登录时&#xff0c;点击Sign in没反应 解决方案 1.打开window11的设置 2.点击应用中的默认应用 3.在设置应用程序的默认值中搜索Google&#xff08;没有Google浏览器的尝试下载一个&a…

30分钟搭建 Typecho 个人博客教程

Typecho是一款PHP博客程序&#xff0c;相比于WordPress&#xff0c;Typecho显得更加的轻量级和简洁。现在越来越多的人倾向于用Typecho来搭建个人博客——众所周知&#xff0c;能跑WordPress的机器都不便宜。 Typecho是一款国人团结打造的开源博客系统&#xff0c;和WordPress…

机器学习详解(11):分类任务的模型评估标准

模型评估是利用不同的评估指标来了解机器学习模型的性能&#xff0c;以及其优势和劣势的过程。评估对于确保机器学习模型的可靠性、泛化能力以及在新数据上的准确预测能力至关重要。 文章目录 1 介绍2 评估准则3 分类指标3.1 准确率 (Accuracy)3.2 精确率 (Precision)3.3 召回率…

RabbitMQ - 4 ( 22000 字 RabbitMQ 入门级教程 )

一&#xff1a; RabbitMQ 高级特性 前面主要讲解了 RabbitMQ 的概念和应用。RabbitMQ 实现了 AMQP 0-9-1 规范&#xff0c;并在此基础上进行了多项扩展。在 RabbitMQ 官方网站中详细介绍了其特性&#xff0c;我们将其中一些重要且常用的特性挑选出来进行讲解。 1.1 消息确认 …

图表控件Aspose.Diagram入门教程(7):在 C# 中删除 Visio 形状保护

是一个关于Microsoft Visio文件使用的类库。在ASP .NET网页应用程序、web服务器和Windows应用程序上的VSD和VDX 文件中&#xff0c;开发者仍然可以使用Aspose.Diagram。它还允许您在打开的文件中编辑图表的元素&#xff0c;然后以Visio和XML的格式导出。 ​ 在某些情况下&#…

Python学习(5):数据结构

1 列表 1.1 列表方法 列表数据类型支持很多方法&#xff0c;列表对象的所有方法所示如下&#xff1a; list.append(x)&#xff1a;在列表末尾添加一项。 类似于 a[len(a):] [x]。list.extend(iterable)&#xff1a;通过添加来自 iterable 的所有项来扩展列表。 类似于 a[len…

Qanything 2.0源码解析系列6 PDF解析逻辑

Qanything 2.0源码解析系列6: PDF解析逻辑 type: Post status: Published date: 2024/12/04 summary: 深入剖析Qanything是如何拆解PDF的,核心是pdf转markdown category: 技术分享 原文:www.feifeixu.top 😀 前言: 在前面的文章中探究了图片是怎么进行解析的,这篇文章对…

【OpenGL ES】GLSL基础语法

1 前言 本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符&#xff08;in、out、inout&#xff09;、函数参数限定符等内容&#xff0c;另外提供了一个 include 工具&#xff0c;方便多文件管理 glsl 代码&a…

端口被占用

端口8080被占用 哈哈哈&#xff0c;我是因为后端项目跑错了&#xff0c;两个项目后端名称太像了&#xff1b; &#xff08;1&#xff09;netstat -aon | findstr 8080&#xff0c;找到占用8080端口的进程号&#xff0c;获取对应的进程号pid&#xff1b; &#xff08;2&#…

Spring中的设计模式

Spring中的设计模式 控制反转(IoC)和依赖注入(DI) IoC 是一个原则&#xff0c;而不是一个模式&#xff0c;以下模式&#xff08;但不限于&#xff09;实现了 IoC 原则。 **Spring IoC 容器就像是一个工厂一样&#xff0c;当我们需要创建一个对象的时候&#xff0c;只需要配置…

【2025 Rust学习 --- 09 特型和泛型】

特型和泛型 Rust 通过两个相关联的特性来支持多态&#xff1a;特型和泛型。许多 程序员熟悉这些概念&#xff0c;但 Rust 受到 Haskell 类型类&#xff08;typeclass&#xff09;的启发&#xff0c;采用 了一种全新的方式。 1、特型是 Rust 体系中的接口或抽象基类。乍一看&a…