Java数字处理类

Posted xingweikun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数字处理类相关的知识,希望对你有一定的参考价值。

数字格式化

Java中使用java.text.DecimalFormat格式化数字
Java中没有格式化的数据遵循以下原则:
如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示。
如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示。

DecimalFormatNumberFormat的一个子类,
用于格式化十进制数字。
它可以将一些数字格式化为整数、浮点数、百分数等。

当格式化数字时,在DecimalFormat类中使用一些特殊字符构成一
个格式化模板,使数字按照一定的特殊字符规则进行匹配。

import java.text.DecimalFormat;
public class DecimalFormatSimpleDemo {

    //使用实例化对象时设置格式化模式
    static public void SimgleFormat(String pattern, double value) {
        DecimalFormat myFormat = new DecimalFormat(pattern);//实例化DecimalFormat对象
        String output = myFormat.format(value);//将数字进行格式化
        System.out.println(value + " " + pattern + " " + output);
    }

    //使用applyPattern()方法对数字进行格式化
    static public void UseApplyPatternMethodFormat(String pattern, double value) {
        DecimalFormat myFormat = new DecimalFormat();//实例化DecimalFormat对象
        myFormat.applyPattern(pattern);//调用applyPattern()方法设置格式化模板
        System.out.println(value + " " + pattern + " " + myFormat.format(value));
    }

    public static void main(String[] args) {
        SimgleFormat("###,###,###", 123456.789);//调用静态SimgleFormat()方法
        SimgleFormat("00000000.###kg", 123456.789);//在数字后加上单位
        //按照格式模板格式化数字,不存在的位以0显示
        SimgleFormat("000000.000", 123.78);
        //调用静态UseApplyPatternMethodFormat()方法
        UseApplyPatternMethodFormat("#.###%", 0.789);//将数字转换为百分数形式
        UseApplyPatternMethodFormat("###.##", 123456.789);//将小数点后格式化为两位
        UseApplyPatternMethodFormat("0.00\\u2030", 0.789);//将数字转化为千分数形式
    }
}
/*
123456.789 ###,###,### 123,457
123456.789 00000000.###kg 00123456.789kg
123.78 000000.000 000123.780
0.789 #.###% 78.9%
123456.789 ###.## 123456.79
0.789 0.00‰ 789.00‰
*/
import java.text.DecimalFormat;

public class DecimalMethod {
    public static void main(String[] args) {
        DecimalFormat myFormat = new DecimalFormat();
        myFormat.setGroupingSize(2);//设置将数字分组为2
        String output = myFormat.format(123456.789);
        System.out.println("将数字以每两个数字分组 " + output);
        myFormat.setGroupingUsed(false);//设置不允许数字进行分组
        String output2 = myFormat.format(123456.789);
        System.out.println("不允许数字分组 " + output2);
    }
}
/*
将数字以每两个数字分组 12,34,56.789
不允许数字分组 123456.789
*/

数学运算

Math类

调用形式
Math.数学方法
Math.PI
Math.E
public class MathDemo {
    public static void main(String[] args) {
        System.out.println("PI:"+Math.PI);
        System.out.println("E:"+Math.E);
    }
}
/*
PI:3.141592653589793
E:2.718281828459045
*/

常用数学运算方法

三角函数方法

public class MathDemo {
    public static void main(String[] args) {
        System.out.println("90度的正弦值:" + Math.sin(Math.PI / 2));
        System.out.println("0度的余弦值:" + Math.cos(0));
        System.out.println("60度的正切值:" + Math.tan(Math.PI / 3));
        System.out.println("2的平方根与2商的反正弦值:" + Math.asin(Math.sqrt(2) / 2));
        System.out.println("2的平方根与2商的反余弦值:" + Math.acos(Math.sqrt(2) / 2));
        System.out.println("1的反正切值:" + Math.atan(1));
        System.out.println("120度的弧度制:" + Math.toRadians(120.0));
        System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI / 2));
    }
}
/*
90度的正弦值:1.0
0度的余弦值:1.0
60度的正切值:1.7320508075688767
2的平方根与2商的反正弦值:0.7853981633974484
2的平方根与2商的反余弦值:0.7853981633974483
1的反正切值:0.7853981633974483
120度的弧度制:2.0943951023931953
π/2的角度值:90.0
*/

指数函数方法

public class MathDemo2 {
    public static void main(String[] args) {
        System.out.println("e的平方值:" + Math.exp(2));
        System.out.println("以e为底e^2的对数值:" + Math.log(Math.exp(2)));
        System.out.println("以10为底100的对数值:" + Math.log10(100));
        System.out.println("4的平方根值:" + Math.sqrt(4));
        System.out.println("8的立方根值:" + Math.cbrt(8));
        System.out.println("2的2次方值:" + Math.pow(2, 2));
    }
}
/*
e的平方值:7.38905609893065
以e为底e^2的对数值:2.0
以10为底100的对数值:2.0
4的平方根值:2.0
8的立方根值:2.0
2的2次方值:4.0
*/

取整函数方法

public class MathDemo3 {
    public static void main(String[] args) {
        //返回第一个大于等于参数的整数6>=5.2
        System.out.println("使用ceil()方法取整:" + Math.ceil(5.2));
        //返回第一个小于等于参数的整数2<=2.5
        System.out.println("使用floor()方法取整:" + Math.floor(2.5));
        //返回与参数最接近的整数2.7~3
        System.out.println("使用rint()方法取整:" + Math.rint(2.7));
        //返回与参数最接近的整数2~2.3
        System.out.println("使用rint()方法取整:" + Math.rint(2.3));
        //将参数加上0.5后返回最接近的整数
        System.out.println("使用round()方法取整:" + Math.round(3.4));
        //将参数加上0.5后返回最接近的整数,并将结果强制转换为长整型
        System.out.println("使用round()方法取整:" + Math.round(2.5f));
    }
}
/*
使用ceil()方法取整:6.0
使用floor()方法取整:2.0
使用rint()方法取整:3.0
使用rint()方法取整:2.0
使用round()方法取整:3
使用round()方法取整:3
*/

取最大值、最小值、绝对值函数方法

public class MathDemo4 {
    public static void main(String[] args) {
        System.out.println("4和8较大者:"+Math.max(4,8));
        System.out.println("4.4和4较小者:"+Math.min(4.4,4));
        System.out.println("-7的绝对值:"+Math.abs(-7));
    }
}
/*
4和8较大者:8
4.4和4较小者:4.0
-7的绝对值:7
*/

随机数

Math.random()方法

public class MathDemo5 {

    public static int GetEvenNum(double num1, double num2) {
        //产生num1~num2之间的随机数
        int s = (int) num1 + (int) (Math.random() * (num2 - num1));
        if (s % 2 == 0) {
            return s;
        } else
            return s + 1;
    }

    public static char GetEvenChar(char c1, char c2) {
        return (char) (c1 + Math.random() * (c2 - c1 + 1));
    }

    public static void main(String[] args) {
        System.out.println("任意一个2~32之间的偶数:" + GetEvenNum(2, 32));
        System.out.println("任意一个a~g之间的字符:" + GetEvenChar('a', 'g'));
        System.out.println("任意小写字符:" + GetEvenChar('a', 'z'));
        System.out.println("任意大写字符:" + GetEvenChar('A', 'Z'));
        System.out.println("0到9任意数字字符:" + GetEvenChar('0', '9'));
    }
}
/*
任意一个2~32之间的偶数:14
任意一个a~g之间的字符:c
任意小写字符:z
任意大写字符:X
0到9任意数字字符:8
*/

Random类

import java.util.Random;

public class MathDemo6 {
    public static void main(String[] args) {
        Random r = new Random();//实例化一个Random类
        //随机产生一个整数
        System.out.println("随机产生一个整数:" + r.nextInt());
        //随机产生一个大于等于0且小于10的整数
        System.out.println("随机产生一个大于等于0且小于10的整数:" + r.nextInt(10));
        //随机产生一个布尔型的值
        System.out.println("随机产生一个布尔型的值:" + r.nextBoolean());
        //随机产生一个双精度型的值
        System.out.println("随机产生一个双精度型的值:" + r.nextDouble());
        //随机产生一个浮点型的值
        System.out.println("随机产生一个浮点型的值:" + r.nextFloat());
        //随机产生一个概率密度为高斯分布的双精度值
        System.out.println("随机产生一个概率密度为高斯分布的双精度值:" + r.nextGaussian());
    }
}
/*
随机产生一个整数:972674800
随机产生一个大于等于0且小于10的整数:6
随机产生一个布尔型的值:false
随机产生一个双精度型的值:0.22562455845402918
随机产生一个浮点型的值:0.01918614
随机产生一个概率密度为高斯分布的双精度值:0.29574176132531116
*/

大数字运算

BigInteger

BigInteger类型的数字范围较Integer类型的数字范围要大得多。Integer是int的包装类,int的最大值为2^31-1,如果要计算更大的数字,使用Integer数据类型就无法实现了,所以Java中提供了BigInteger类来处理更大的数字

import java.math.BigInteger;

public class MathDemo7 {
    public static void main(String[] args) {
        BigInteger bigInstance = new BigInteger("6");//实例化一个大数字
        //取该大数字加2的操作
        System.out.println("加法操作:" + bigInstance.add(new BigInteger("2")));
        //取该大数字减3的操作
        System.out.println("减法操作:" + bigInstance.subtract(new BigInteger("3")));
        //取该大数字乘以2的操作
        System.out.println("乘法操作" + bigInstance.multiply(new BigInteger("2")));
        //取该大数字除以2的操作
        System.out.println("除法操作:" + bigInstance.divide(new BigInteger("2")));
        //取该大数字除以4的商
        System.out.println("取商:" + bigInstance.divideAndRemainder(new BigInteger("4"))[0]);
        //取该大数字除以4的余数
        System.out.println("取余数:" + bigInstance.divideAndRemainder(new BigInteger("4"))[1]);
        //取该大数字的2次方
        System.out.println("做2次方操作:" + bigInstance.pow(2));
        //取该大数字的相反数
        System.out.println("取相反数的操作:" + bigInstance.negate());
    }
}
/*
加法操作:8
减法操作:3
乘法操作12
除法操作:3
取商:1
取余数:2
做2次方操作:36
取相反数的操作:-6
*/

BigDecimal

BigDecimal和BigInteger都能实现大数字的运算,不同的是
BigDecimal加入了小数的概念。一般的float型和double型数据只可以用
来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,
所以要用到java.math.BigDecimal类。BigDecimal类支持任何精度的定点数,
可以用它来精确计算货币值。

加减乘除和上一个方法类似

import java.math.BigDecimal;

public class BigDecimalDemo {
    static final int location = 10;

    /**
     * 定义加法方法,参数为加数或被加数
     *
     * @param value1 相加的第一个数
     * @param value2 相加的第二个数
     * @return 两数之和
     */
    public BigDecimal add(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.add(b2);
    }

    /**
     * 定义减数方法,参数为减数与被减数
     *
     * @param value1 被减数
     * @param value2 减数
     * @return 运算结果
     */
    public BigDecimal sub(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.subtract(b2);
    }

    /**
     * 定义乘数方法,参数为乘数与被乘数
     *
     * @param value1 第一个乘数
     * @param value2 第二个乘

以上是关于Java数字处理类的主要内容,如果未能解决你的问题,请参考以下文章

java 代码片段

java代码在片段活动中不起作用

java 反射代码片段

片段(Java) | 机试题+算法思路+考点+代码解析 2023

处理recyclerview单击片段而不是持有者类

如何从 Android Studio 中片段的 XML 布局导航到相应的 java 类?