hutool系列教材 (十二)- 常用类辅助工具 - Java 数字工具

时间:2025-03-11 22:17:56

package cn.;

import static ;

import static ;

import ;

import ;

import ;

import ;

import ;

import ;

import ;

import ;

import ;

import ;

import ;

public class TestNumber {

    @Test

    @Comment("精确计算")

    public void test1(){

        double result1 = (1.2 0.4);

        p3("浮点数计算 1.2 - 0.4 无法得到精确结果",result1);

        double result2 = (1.20.4);

        p3("浮点数计算 (1.2,0.4) 就能得到精确结果",result2);

    }

    @Test

    @Comment("四舍五入")

    public void test2(){

        double a = 100.123;

        double b = 100.125;

         

        double result1= (a, 2).doubleValue();

        double result2= (b, 2).doubleValue();

         

        p1("浮点数", a, "四舍五入之后", result1);

        p1("浮点数", b, "四舍五入之后", result2);

         

    }

    @Test

    @Comment("数字格式化")

    public void test3(){

         

//      0 -> 取一位整数

//      0.00 -> 取一位整数和两位小数

//      00.000 -> 取两位整数和三位小数

//      # -> 取所有整数部分

//      #.##% -> 以百分比方式计数,并取两位小数

//      #.#####E0 -> 显示为科学计数法,并取五位小数

//      ,### -> 每三位以逗号进行分隔,例如:299,792,458

//      光速大小为每秒,###米 -> 将格式嵌入文本

         

        p3("对π进行格式化,π的值是",);

        double pi= ;

        String format = null;

        String str = null;

        format= "0";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

        format= "0.00";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

        format= "00.000";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

        format= "#";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

        format= "#.##";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

        format= "#.##%";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

         

        format= "#.####E0";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

        format= ",###";

        str = (format,pi*10000);

        p2("格式",format,"x1000 再格式化后得到", str);

        format= ",####";

        str = (format,pi*10000);

        p2("格式",format,"x1000 再格式化后得到", str);

        format= "π的大小是#.##########,请课后记忆";

        str = (format,pi);

        p2("格式",format,"格式化后得到", str);

          

    }

    @Test

    @Comment("数字判断")

    public void test4(){

        String s1 = "3.1415926";

        int n = 11;

        p2("字符串",s1, "是否数字",(s1));

        p2("字符串",s1, "是否整数(这个有问题)",(s1));

        p2("字符串",s1, "是否浮点数",(s1));

        p2("整数",n, "是否质数",(n));

    }

    @Test

    @Comment("随机数")

    public void test5(){

        int random[]=(1,1000,10);

         

        p3("最小是1,最大是1000,总长度是10的不重复随机数组",(random));

    }

    @Test

    @Comment("整数列表")

    public void test6(){

        int numbers[] = (01009);

        p3("最小是0,最大是100,步长是9的数组",(numbers));

    }

    @Test

    @Comment("其他相关")

    public void test7(){

         

        p3("计算3的阶乘", (3));

        p3("计算9的平方根", (9));

        p3("计算9和6的最大公约数", (9,6));

        p3("计算9和6的最小公倍数", (9,6));

        p3("获得数字9对应的二进制字符串", (9));

        p3("获取123456789对应金额", (123456789));

    }

     

    private String preComment = null

    private void c(String msg) {

        ("\t备注:%s%n",msg);

    }

    private void p1(String type1, Object value1, String type2, Object value2) {

        p(type1, value1, type2, value2, "format1");

    }

    private void p2(String type1, Object value1, String type2, Object value2) {

        p(type1, value1, type2, value2, "format2");

    }

    private void p3(String type1, Object value1) {

        p(type1, value1, """""format3");

    }

  

    private void p(String type1, Object value1, String type2, Object value2, String format) {

        try {

            throw new Exception();

        catch (Exception e) {

              

            String methodName = getTestMethodName(());

            Method m =(this.getClass(), methodName);

            Comment annotation = (Comment.class);

            if(null!=annotation) {

                String comment= ();

                if(!(preComment)) {

                    ("%n%s 例子: %n%n",comment);

                    preComment = comment;

                }

                  

            }

        }

        int padLength = 12;

        type1=(type1,padLength,(" ").charAt(0));

        type2=(type2,padLength,(" ").charAt(0));

        if("format1".equals(format)) {

            ("\t%s的:\t\"%s\" %n\t被转换为----->%n\t%s的 :\t\"%s\" %n%n",type1,value1, type2, value2);

        }

        if("format2".equals(format)) {

            ("\t基于 %s:\t\"%s\" %n\t获取 %s:\t\"%s\"%n%n",type1,value1, type2, value2);

        }

        if("format3".equals(format)) {

            ("\t%s:\t\"%s\" %n\t%n",type1,value1);

  

        }

    }

      

    private String getTestMethodName(StackTraceElement[] stackTrace) {

        for (StackTraceElement se : stackTrace) {

            String methodName = ();

            if(("test"))

                return methodName;

        }

        return null;

    }

  

    @Target({METHOD,TYPE})

    @Retention()

    @Inherited

    @Documented

    public @interface Comment {

         String value();

    }

}