NumberUtils BigDecimal 对应的加减乘除、格式化等方法

import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; /**BigDecimal 对应的加减乘除、格式化等方法<br /> * * @author EX-CHENWEIXIAN001 *2012-11-8 */ public class NumberUtils { /** * 默认返回小数2位 */ public static final int DEFAULT_SCALE = 2; /** * 提供精确的加法运算。 * * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static BigDecimal add(BigDecimal b1, BigDecimal b2) { return b1.add(b2); } /** * 提供精确的减法运算。 * * @param v1 被减数 * @param v2 减数 * @return 两个参数的差 */ public static BigDecimal sub(BigDecimal b1, BigDecimal b2) { return b1.subtract(b2); } /** * 提供精确的乘法运算。 * * @param v1 被乘数 * @param v2 乘数 * @return 两个参数的积 */ public static BigDecimal mul(BigDecimal b1, BigDecimal b2) { return b1.multiply(b2); } /** * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。 * * @param v1 被除数 * @param v2 除数 * @return 两个参数的商 */ public static BigDecimal div(BigDecimal b1, BigDecimal b2) { return div(b1, b2, DEFAULT_SCALE); } /** * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。 * * @param v1 被除数 * @param v2 除数 * @param scale 表示表示需要精确到小数点以后几位。 * @return 两个参数的商 */ public static BigDecimal div(BigDecimal b1, BigDecimal b2, int scale) { if (scale < 0) { throw new IllegalArgumentException("默认小数位必须大于或者0!"); } return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP); } /** * 提供精确的小数位四舍五入处理。 * * @param v 需要四舍五入的数字 * @param scale 小数点后保留几位 * @return 四舍五入后的结果 */ public static BigDecimal round(BigDecimal b, int scale) { if (scale < 0) { throw new IllegalArgumentException("默认小数位必须大于或者0!"); } BigDecimal one = new BigDecimal("1"); return b.divide(one, scale, BigDecimal.ROUND_HALF_UP); } /** * 格式化信息内容 * * @param v 需要四舍五入的数字 * @param scale 小数点后保留几位 * @return 格式化后的结果 */ public static String format(BigDecimal b, int scale) { if (scale < 0) { throw new IllegalArgumentException("默认小数位必须大于或者0!"); } StringBuffer formatString = new StringBuffer("###,##0"); if (scale > 0) { formatString.append("."); for (int i = 0; i < scale; i++) { formatString.append("0"); } } NumberFormat numberFormat = new DecimalFormat(formatString.toString()); return numberFormat.format(b); } /**字符串转换为数据类型 * * @param str * @return */ public static BigDecimal stringToBigDecimal(String str) { return new BigDecimal(str); } /** * 测试 * * @param args */ public static void main(String[] args) { BigDecimal v1 = new BigDecimal("10.58"); BigDecimal v2 = new BigDecimal("5"); BigDecimal v3 = new BigDecimal("5555555555.2722222226"); System.out.println(NumberUtils.add(v1, v2)); System.out.println(NumberUtils.sub(v1, v2)); System.out.println(NumberUtils.mul(v1, v2)); System.out.println(NumberUtils.div(v1, v2)); System.out.println(NumberUtils.div(v1, v2,3)); System.out.println(NumberUtils.round(v3, 1)); System.out.println(NumberUtils.format(v3, 5)); } }
主要用于数字操作,在java代码中计算不要使用double,float,int,long,short等类型,使用BigDecimal是比较好的。这里提供一个工具类。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器