# AlgorithmStar 实现单位数值的计算 *AlgorithmStar* 本文中将会演示通过 AS 机器学习库 实现 单位数值 ## 目录 [TOC]  ## 导入 AS 机器学习库 从 1.31 版本开始,AS 机器学习库针对单位数值类的支持开始变的完善,相较于 1.29 版本,其具有更多的功能以及更快的计算速度,接下来我们开始导入 AS 的· 1.31 版本。 ```xml <dependencies> <!-- Binding using the adapter of log4j2 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.20.0</version> <!--<scope>provided</scope>--> </dependency> <!-- Log4j2 log facade --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version> <!--<scope>provided</scope>--> </dependency> <!-- Log4j2 log real surface --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> <!--<scope>provided</scope>--> </dependency> <dependency> <groupId>io.github.BeardedManZhao</groupId> <artifactId>algorithmStar</artifactId> <version>1.31</version> </dependency> </dependencies> ``` ## 基础单位数值类 在 AS 库中 所有的单位数值类有一个统一的父类 那就是基础单位数值类,此类中具有通用的单位进制计算方法,能够实现强大的单位计算操作,具有自动的单位进制转换等特点,接下来我们将进行相关知识的演示 ### 创建基础单位数值类 ```java package top.lingyuzhao; import zhao.algorithmMagic.core.AlgorithmStar; import zhao.algorithmMagic.core.BaseValueFactory; import zhao.algorithmMagic.operands.unit.BaseValue; public class MAIN { public static void main(String[] args) { // 在这里我们获取到的就是单位数值的工厂类 在这里的函数参数是工厂要构造的单位数值的类型 // 请确保您在这里提供的单位数值类具有 @BaseUnit 注解和 parse 函数 final BaseValueFactory baseValueFactory = AlgorithmStar.baseValueFactory(BaseValue.class); // 使用工厂类 将 1024 转换成为一个单位数值 final BaseValue parse1 = baseValueFactory.parse(1024); // 使用工厂类 将 1024000 转换成为一个单位数值 final BaseValue parse2 = baseValueFactory.parse(1024000); // 打印一下两个单位数值 System.out.println(parse1); System.out.println(parse2); } } ``` 下面就是代码的运行结果,可以看到它将我们传递的数值进行了一个最简化,同时将其单位拼接到结尾处。 ``` 1.024千 1.024百万 进程已结束,退出代码0 ``` ### 相同单位的数值进行运算 #### 基本的计算使用 在这里,我们将会演示 两个相同单位(都是基础单位数值类)的一些相互计算的示例,当两个单位数值的单位的等级不同或相同(例如 百万和万 或者 万和万),以及单位相同(两个数值都是同一个单位组,例如都是基础单位数值对象)的时候,就可以让两个数值对象之间进行一些计算操作。 ```java package top.lingyuzhao; import zhao.algorithmMagic.core.AlgorithmStar; import zhao.algorithmMagic.core.BaseValueFactory; import zhao.algorithmMagic.operands.unit.BaseValue; public class MAIN { public static void main(String[] args) { // 在这里我们获取到的就是单位数值的工厂类 在这里的函数参数是工厂要构造的单位数值的类型 // 请确保您在这里提供的单位数值类具有 @BaseUnit 注解和 parse 函数 final BaseValueFactory baseValueFactory = AlgorithmStar.baseValueFactory(BaseValue.class); // 使用工厂类 将 2 转换成为一个单位数值 final BaseValue parse1 = baseValueFactory.parse(2); // 使用工厂类 将 1024 转换成为一个单位数值 final BaseValue parse2 = baseValueFactory.parse(1024); // 计算加减乘除结果 System.out.println(parse2.add(parse1)); System.out.println(parse2.diff(parse1)); // 针对乘除的计算,如果不需要考虑单位的问题,可以直接传递一个整数,也推荐传递一个整数 System.out.println(parse2.multiply(2)); System.out.println(parse2.divide(2)); } } ``` 下面就是计算结果,需要注意的是,这里的计算结果并不会进行数值最简化操作,这是为了计算性能的考虑,您可以在[单位数值的转换操作](#单位数值的转换操作 "单位数值的转换操作")小节中,学习到如何实现将数值进行最简化。 ``` 1.026千 1.022千 2.048千 0.512千 进程已结束,退出代码0 ``` ### 单位数值的转换操作 在上面的章节中,我们学习到了单位数值对象的创建以及计算操作,在这里我们将会学习在计算操作中可能会需要使用到的一些特殊函数,也就是转换函数。 #### 转换单位数值中的单位(数值也会发生变化) 一个单位数值的单位如果被修改了之后,则这个单位数值中的数值也会发生变化,这样可以确保单位数值的值不变的前提下修改单位,下面是一个实例。 ```java package top.lingyuzhao; import zhao.algorithmMagic.core.AlgorithmStar; import zhao.algorithmMagic.core.BaseValueFactory; import zhao.algorithmMagic.operands.unit.BaseValue; public class MAIN { public static void main(String[] args) { // 在这里我们获取到的就是单位数值的工厂类 在这里的函数参数是工厂要构造的单位数值的类型 // 请确保您在这里提供的单位数值类具有 @BaseUnit 注解和 parse 函数 final BaseValueFactory baseValueFactory = AlgorithmStar.baseValueFactory(MyDateValue.class); // 使用工厂类 构造两个时间单位数值对象 final BaseValue parse1 = baseValueFactory.parse(2000 * 60); // 将单位对象中的单位转换为 秒 final BaseValue baseValue = parse1.switchUnits("秒"); System.out.println(baseValue); // 将单位对象中的单位转换为 秒 但是确保数值不变 这样只会修改单位 } } ``` 下面是计算之后的结果 ``` 120000.0秒 进程已结束,退出代码0 ``` #### 转换单位数值中的单位(但是不改变数值) 如果我们希望仅仅只修改单位数值中的单位,但是不修改单位数值中的数值,确保数值不变 这样只会修改单位,那么下面的示例会很适合学习 ```java package top.lingyuzhao; import zhao.algorithmMagic.core.AlgorithmStar; import zhao.algorithmMagic.core.BaseValueFactory; import zhao.algorithmMagic.operands.unit.BaseValue; public class MAIN { public static void main(String[] args) { // 在这里我们获取到的就是单位数值的工厂类 在这里的函数参数是工厂要构造的单位数值的类型 // 请确保您在这里提供的单位数值类具有 @BaseUnit 注解和 parse 函数 final BaseValueFactory baseValueFactory = AlgorithmStar.baseValueFactory(MyDateValue.class); // 使用工厂类 构造两个时间单位数值对象 final BaseValue parse1 = baseValueFactory.parse(2000 * 60); // 将单位对象中的单位转换为 秒 但是确保数值不变 这样只会修改单位 数值对象也不会有新的创建 parse1.switchUnitsNotChange("秒"); System.out.println(parse1); } } ``` 下面就是计算之后的结果 ``` 2.0秒 进程已结束,退出代码0 ``` ------ ***操作记录*** 作者:[algorithmStar](https://www.lingyuzhao.top//index.html?search=23 "algorithmStar") 操作时间:2024-02-10 16:51:29 星期六 事件描述备注:保存/发布 中国 天津 [](如果不需要此记录可以手动删除,每次保存都会自动的追加记录)