文章目录
数字格式化
在Java中使用java.text.DecimalFormat格式化数字
在Java中没有格式化的数据遵循以下原则:
如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示。
如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示。
DecimalFormat是NumberFormat的一个子类,
用于格式化十进制数字。
它可以将一些数字格式化为整数、浮点数、百分数等。
当格式化数字时,在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
*/