使用枚举进行简单计算,现在只有简单常用的单位,如有需要自行添加,以标准单位为基准

源码Gitee

参考代码

import lombok.AllArgsConstructor;
import lombok.Getter;import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 计量单位换算** @author XinLau*/
public class UnitConversion {/*** 四舍五入** @param value    - 原始数值* @param original - 原始单位* @param need     - 转换的单位* @return BigDecimal - 转换后的值*/public static BigDecimal conversion(BigDecimal value, String original, String need) {return conversion(value, getUnitEnum(original), getUnitEnum(need));}/*** 指定小数点位数,四舍五入** @param value    - 原始数值* @param original - 原始单位* @param need     - 转换的单位* @param scale    - 小数点位数* @return BigDecimal - 转换后的值*/public static BigDecimal conversion(BigDecimal value, String original, String need, final Integer scale) {return conversion(value, getUnitEnum(original), getUnitEnum(need), scale);}/*** 使用默认为数(2 或 need 的小数点位数)四舍五入** @param value    - 原始数值* @param original - 原始单位* @param need     - 转换的单位* @return BigDecimal - 转换后的值*/public static BigDecimal conversion(final BigDecimal value, final UnitsEnum original, final UnitsEnum need) {String needString = need.rate.toString();int scale = 2;if (needString.indexOf('.') > 0) {scale = needString.substring(needString.indexOf('.')).length() - 1;}return conversion(value, original, need, scale);}/*** 转换主方法,指定小数点位数,四舍五入** @param value    - 原始数值* @param original - 原始单位* @param need     - 转换的单位* @param scale    - 小数点位数* @return BigDecimal - 数值*/public static BigDecimal conversion(final BigDecimal value, final UnitsEnum original, final UnitsEnum need, final Integer scale) {if (original == UnitsEnum.UN_KNOWN || need == UnitsEnum.UN_KNOWN) {throw new IllegalArgumentException("存在不支持的计量单位参数");}if (original.category != need.category) {throw new IllegalArgumentException(String.format("转换计量单位不统一 %s 不能转换为 %s ", original.category.name, need.category.name));}return value == null ? new BigDecimal(0) : value.multiply(need.rate).divide(original.rate, scale, RoundingMode.HALF_UP);}/*** 获取计量单位枚举** @param unit - 计量单位名称* @return UnitsEnum - 计量单位*/public static UnitsEnum getUnitEnum(String unit) {if (AgileUtil.isNotEmpty(unit)) {for (UnitsEnum unitEnum : UnitsEnum.values()) {for (String possibleName : unitEnum.possibleNames) {if (possibleName.equals(unit.toLowerCase())) {return unitEnum;}}}}return UnitsEnum.UN_KNOWN;}/*** 获取计量单位集合** @return Map<String, List < Map < String, String>>> - 计量单位集合*/public static Map<String, List<Map<String, String>>> getUnitListMap() {Map<String, List<Map<String, String>>> listMap = new HashMap<>(UnitsEnum.CategoryEnum.values().length);for (UnitsEnum unit : UnitsEnum.values()) {if (unit.category != null) {String categoryName = unit.category.name;Map<String, String> lengthMap = new HashMap<>(2);lengthMap.put("code", unit.getUnits());lengthMap.put("name", unit.getDescription());List<Map<String, String>> list = listMap.get(categoryName);if (list == null || list.isEmpty()) {list = new ArrayList<>();}list.add(lengthMap);listMap.put(categoryName, list);}}return listMap;}/*** 获取计量单位类型** @return List<Map < String, String>> - 计量单位类型*/public static List<Map<String, String>> getCategoryList() {List<Map<String, String>> categoryList = new ArrayList<>();for (UnitsEnum.CategoryEnum category : UnitsEnum.CategoryEnum.values()) {Map<String, String> lengthMap = new HashMap<>(2);lengthMap.put("code", category.getName());lengthMap.put("name", category.getDescription());categoryList.add(lengthMap);}return categoryList;}/*** 计量单位枚举*/@Getter@AllArgsConstructorpublic enum UnitsEnum {/*** 长度计量单位*/LG_KM(CategoryEnum.LENGTH, "km", new String[]{"km", "千米"}, new BigDecimal("0.001"), "千米"),LG_M(CategoryEnum.LENGTH, "m", new String[]{"m", "米"}, new BigDecimal("1"), "米"),LG_DM(CategoryEnum.LENGTH, "dm", new String[]{"dm", "分米"}, new BigDecimal("10"), "分米"),LG_CM(CategoryEnum.LENGTH, "cm", new String[]{"cm", "厘米"}, new BigDecimal("100"), "厘米"),LG_MM(CategoryEnum.LENGTH, "mm", new String[]{"mm", "毫米"}, new BigDecimal("1000"), "毫米"),LG_UM(CategoryEnum.LENGTH, "um", new String[]{"um", "微米"}, new BigDecimal("1000000"), "微米"),LG_NM(CategoryEnum.LENGTH, "nm", new String[]{"nm", "纳米"}, new BigDecimal("1000000000"), "纳米"),LG_INCH(CategoryEnum.LENGTH, "in", new String[]{"in", "inch", "英寸"}, new BigDecimal("39.3700787"), "英寸"),LG_FOOT(CategoryEnum.LENGTH, "ft", new String[]{"ft", "foot", "英尺"}, new BigDecimal("3.2808399"), "英尺"),LG_MILES(CategoryEnum.LENGTH, "mi", new String[]{"mi", "miles", "英里"}, new BigDecimal("0.00062137"), "英里"),LG_NAUTICAL_MILE(CategoryEnum.LENGTH, "nmile", new String[]{"nmile", "nauticalmile", "海里"}, new BigDecimal("0.00053996"), "海里"),/*** 质量计量单位*/EG_T(CategoryEnum.WEIGHT, "t", new String[]{"t", "吨"}, new BigDecimal("0.001"), "吨"),EG_KG(CategoryEnum.WEIGHT, "kg", new String[]{"kg", "千克"}, new BigDecimal("1"), "千克"),EG_G(CategoryEnum.WEIGHT, "g", new String[]{"g", "克"}, new BigDecimal("1000"), "克"),EG_MG(CategoryEnum.WEIGHT, "mg", new String[]{"mg", "毫克"}, new BigDecimal("1000000"), "毫克"),EG_UG(CategoryEnum.WEIGHT, "μg", new String[]{"μg", "ug", "微克"}, new BigDecimal("1000000000"), "微克"),EG_LB(CategoryEnum.WEIGHT, "lb", new String[]{"lb", "lbs", "磅"}, new BigDecimal("2.2046226"), "磅"),EG_OZ(CategoryEnum.WEIGHT, "oz", new String[]{"oz", "盎司"}, new BigDecimal("35.2739619"), "盎司"),EG_CT(CategoryEnum.WEIGHT, "ct", new String[]{"ct", "克拉"}, new BigDecimal("5000"), "克拉"),/*** 温度计量单位*/TG_DEGREE_CELSIUS(CategoryEnum.TEMPERATURE, "°C", new String[]{"°C", "degreecelsius", "摄氏度"}, new BigDecimal("1"), "摄氏度"),TG_FAHRENHEIT_SCALE(CategoryEnum.TEMPERATURE, "°F", new String[]{"°F", "fahrenheitscale", "华氏度"}, new BigDecimal("33.8"), "华氏度"),/*** 速度计量单位*/TS_KM(CategoryEnum.SPEED, "km/h", new String[]{"km/h", "公里/小时"}, new BigDecimal("1"), "公里/小时"),TS_MILES(CategoryEnum.SPEED, "mi/h", new String[]{"mi/h", "英里/小时"}, new BigDecimal("0.62137119"), "英里/小时"),TS_NAUTICAL_MILE(CategoryEnum.SPEED, "nmile/h", new String[]{"nmile/h", "海里/小时"}, new BigDecimal("0.5399568"), "海里/小时"),TS_KNOT(CategoryEnum.SPEED, "knot", new String[]{"knot", "节"}, new BigDecimal("0.5399568"), "节"),TS_MACH(CategoryEnum.SPEED, "mach", new String[]{"mach", "machnumber", "马赫"}, new BigDecimal("0.00080985"), "马赫"),/*** 未知*/UN_KNOWN(null, "未知", null, new BigDecimal("0"), "未知");/*** 计量类别*/private final CategoryEnum category;/*** 计量单位*/private final String units;/*** 可能的名称*/private final String[] possibleNames;/*** 换算率*/private final BigDecimal rate;/*** 描述*/private final String description;/*** 计量类别*/@Getter@AllArgsConstructorprivate enum CategoryEnum {/*** 长度*/LENGTH("Length", UnitsEnum.LG_M, "长度"),/*** 质量*/WEIGHT("Weight", UnitsEnum.EG_KG, "质量"),/*** 温度*/TEMPERATURE("Temperature", UnitsEnum.TG_DEGREE_CELSIUS, "温度"),/*** 速度*/SPEED("Speed", UnitsEnum.TG_DEGREE_CELSIUS, "速度"),;/*** 类别名称*/private final String name;/*** 类别基准*/private final UnitsEnum base;/*** 描述*/private final String description;}}}

Java 计量单位换算 工具类相关推荐

  1. Java封装OkHttp3工具类

    点击关注公众号,Java干货及时送达  作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...

  2. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  3. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  4. java时间日期工具类_java日期处理工具类

    java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...

  5. java 日期处理工具类_Java日期处理工具类DateUtils详解

    本文实例为大家分享了Java日期处理工具类DateUtils的具体代码,供大家参考,具体内容如下 import java.sql.Timestamp; import java.text.ParseEx ...

  6. java downloadfile_FileDownload.java:文件下载工具类

    FileDownload.java:文件下载工具类 2017-04-25·Mr.Xia 4489 次浏览 文件下载功能的工具类 JavaWeb工具类目录 [http://baike.xsoftlab. ...

  7. java.util.zip 用法,Java压缩文件工具类ZipUtil使用方法代码示例

    本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下: package com.utility.zip; import java.io. ...

  8. java基于HuTool工具类ExcelWriter合并单元格

    ** java基于HuTool工具类ExcelWriter合并单元格 ** 1.基于HuTool工具类ExcelWriter合并单元格并且使用 jdk1.8 lambda表达式 效果如下: 用姓名和编 ...

  9. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月22日 http://fansh ...

  10. Java导入Excel工具类使用教程

    前言: 本工具类提供了Excel导入功能,通过反射机制将Excel中数据映射到实体类中,从而获取Excel数据,工具类依赖org.apache.poi包.支持RESTful API,支持Spring ...

最新文章

  1. 《UNIX高级环境编程》 -- apue.h
  2. 启动webpack-dev-server只能本机访问的解决办法
  3. 2017-09-29 前端日报
  4. 香港大学自然语言处理实验室PhD/RA招生(HKU NLP)
  5. Gson与FastJson比较
  6. 1.3.1 操作系统的运行机制和体系结构(大内核、小内核)
  7. Ubuntu 18.04下命令安装VMware Tools
  8. 由「Metaspace容量不足触发CMS GC」从而引发的思考
  9. win8 必须重新启动计算机才能关闭用户账户控制,windows8中怎么关闭用户账户控制(UAC)仅针对单个用户...
  10. 每天一个实用小技巧!教你在Mac上快速输入长文本
  11. (6)售货机verilog与Systemverilog编码
  12. cenetos 查看字体库_Centos7 安装字体库中文字体
  13. Android 音视频采集与软编码总结
  14. java音乐_用JavaJFugue进行音乐编程
  15. 2022煤矿井下爆破考试题库模拟考试平台操作
  16. 京东数据分析工具,同行商家数据快速查看对比
  17. 香港公司--离岸帐户现金
  18. 根据sitemap一键推送给百度收录的python小脚本
  19. Node-RED使用指南:6:配置与设定总结:运行环境配置
  20. A44-网页前端第四次笔记

热门文章

  1. 20.数据集成、数据整合、数据融合
  2. 安卓动画入门教程 Animation in Android(2)
  3. Windows服务器IE浏览器无法下载文件解决方法
  4. Linux关闭防火墙并设置开机启动/不启动
  5. LeetCode 75. Sort Colors(三颜色排序→K颜色排序)
  6. 大天使之剑H5游戏超详细图文架设教程
  7. win10桌面无限刷新
  8. 【IDE】Intellij IDEA启动正常,但是任务栏不显示图标
  9. word、excel、PPT快捷键一览
  10. [NISACTF 2022]