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 第二个乘数
     * @return 运算结果
     */
    public BigDecimal mul(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.multiply(b2);
    }

    /**
     * 定义除数方法,参数为乘数与被乘数
     *
     * @param value1 被除数
     * @param value2 除数
     * @return 运算结果
     */
    public BigDecimal div(double value1, double value2) {
        return div(value1, value2, location);
    }

    public BigDecimal div(double value1, double value2, int b) {
        if (b < 0) {
            System.out.println("b值必须大于等于0");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.divide(b2, b, BigDecimal.ROUND_HALF_UP);
    }

    public static void main(String[] args) {
        BigDecimalDemo b = new BigDecimalDemo();
        System.out.println("两个数字相加结果:" + b.add(-7.5, 8.9));
        System.out.println("两个数字相减结果:" + b.sub(-7.5, 8.9));
        System.out.println("两个数字相乘结果:" + b.mul(-7.5, 8.9));
        System.out.println("两个数字相除结果,结果小数后保留10位:" + b.div(10, 2));
        System.out.println("两个数字相除,保留小数后5位:" + b.div(-7.5, 8.9, 5));
    }
}
/*
两个数字相加结果:1.4
两个数字相减结果:-16.4
两个数字相乘结果:-66.75
两个数字相除结果,结果小数后保留10位:5.0000000000
两个数字相除,保留小数后5位:-0.84270
*/
/** * @project: WebProjectUtil * @class: NumberUtil * @describe: 此工具用来处理数字方面的逻辑, * 如返回指定位数的随机数字、Double的加减乘除精确运算、指定位数数字用“0”补齐 * @autho: Administrator * @date: 2013-6-7 下午02:26:27 * @alter: Administrator * @alterDate: 2013-6-7 下午02:26:27 * @alterRemark: * @version V1.0 */ public class NumberUtil { private static final int DEF_DIV_SCALE = 2; /** * @return 返回12位随机数 */ public static String randomNumber() { } /** * @param parm * @return 返回指定位数随机数 */ public static String randomNumber(int parm) { } /** * * 两个Double数相加 * * @param v1 * @param v2 * @return Double */ public static Double add(Double v1, Double v2) { } /** * * 两个Double数相减 * * @param v1 * @param v2 * @return Double */ public static Double sub(Double v1, Double v2) { } /** * * 两个Double数相乘 * * @param v1 * @param v2 * @return Double */ public static Double mul(Double v1, Double v2) { } /** * * 两个Double数相除 * * @param v1 * @param v2 * @return Double */ public static Double div(Double v1, Double v2) { } /** * * 两个Double数相除,并保留scale位小数 * * @param v1 * @param v2 * @param scale * @return Double */ public static Double div(Double v1, Double v2, int scale) { } /** * 返回指定Double的负数 * @param v1 * @return */ public static Double neg(Double v1) { /** * @Title: toFixdLengthString * @Description: 将字符串用符号填充位数 * @param str 源字符串 * @param fixdlenth 位数 * @return String * @throws */ public static String toFixdLengthString(String str, int fixdlenth) { } /** * @Title: toFixdLengthString * @Description: 将数字用“0”填充位数 * @param num * @param fixdlenth * @return String * @throws */ public static String toFixdLengthString(int num, int fixdlenth) { } /** * @Title: generateSpaceString * @Description: 得到指定位数占位符 * @param length * @return String * @throws */ public static String generateSpaceString(int length) { } /** * @Title: generateZeroString * @Description: 得到指定位数的“0”的占位符 * @param length * @return String * @throws */ public static String generateZeroString(int length) { } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据攻城小狮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值