Java学习日记:几个数字处理类的使用

1.数字格式化

数字格式化在实际问题中使用非常普遍,比如超市的商品价格,需要保留两位有效数字。
在Java语言中,没有经过格式化的数据遵循以下原则:
1)如果数据绝对值大于0.001且小于10000000,Java将以常规小数形式表示。
2)如果数据绝对值小于0.001或大于10000000,Java将以科学计数法形式表示。
很显然,对于开头提到的商品价格问题,通过上述原则不能满足所需的输出格式。这时,我们需要将数据格式化为指定形式后再进行输出。在Java语言中,采用java.text.DecimalFormat进行格式化数字操作。
以DecimalFormat为例,该类可用于格式化十进制数字,可以将目标数转化为整数、浮点数、百分数等。一般情况下,可以再实例化DecimalFormat对象时传递数字格式,也可通过DEecimalFormat类中的applyPattern()方法实现数字格式化。

import java.text.DecimalFormat;

public class DecimalFormatSimpleDemo {
	// 使用实例化对象时设置格式化模式
	static public void SimgleFormat(String pattern, double value) {
		// 实例化DecimalFormat对象
		DecimalFormat myFormat = new DecimalFormat(pattern); 
		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); // 调用applyPatten()方法设置格式化模板
		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,456.789
123456.789 00000000.###kg 00123456.789kg
123.78 000000.000 000123.780
0.789 #.###% 78.9%
123456.789 ###.## 123456.79
0.789 0.00789.00

2.数学运算

Java中提供了基本数学运算方法Math,其中包含了三角函数、指数函数、取整函数、取最大值、最小值及平均值的方法,此外还包含如PI,E等常用的数学常量,通过以下方式即可调用。

Math.数学方法
Math.PI

以三角函数为例:

public class TrigonometricFunction {
	public static void main(String[] args) {
		// 取90度的正弦
		System.out.println("90度的正弦值:" + Math.sin(Math.PI / 2));
		System.out.println("0度的余弦值:" + Math.cos(0)); // 取0度的余弦
		// 取60度的正切
		System.out.println("60度的正切值:" + Math.tan(Math.PI / 3));
		// 取2的平方根与2商的反正弦
		System.out.println("2的平方根与2商的反弦值:"
				+ Math.asin(Math.sqrt(2) / 2));
		// 取2的平方根与2商的反余弦
		System.out.println("2的平方根与2商的反余弦值:"
				+ Math.acos(Math.sqrt(2) / 2));
		System.out.println("1的反正切值:" + Math.atan(1)); // 取1的反正切
		// 取120度的弧度值
		System.out.println("120度的弧度值:" + Math.toRadians(120.0));
		// 取π/2的角度
		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

3.随机数

一般通过Math.random()方法生成随机数,该方法默认可生成大于等于0.0且小于1.0的double型随机数,通过变形:
(int)(Math.random()*n) 返回大于等于0且小于n的随机数
m+(int)(Math.random()*n) 返回大于等于m且小于m+n的随机数

例如:判断两个数之间的偶数,如果是则输出,如果不是则加1后输出

public class MathRondom {
	/**
	 * 定义产生偶数的方法
	 * @param num1 起始范围参数
	 * @param num2 终止范围参数
	 * @return 随即的范围内偶数
	 */
	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; // 将结果加1后返回
	}
	
	public static void main(String[] args) {
		// 调用产生随机数方法
		System.out.println("任意一个2~32之间的偶数:" + GetEvenNum(2, 32));
	}
}

运算结果如下:

任意一个2~32之间的偶数:14

习题:

1.题目:获取2~32之间(不包括32)的6个偶数,取得这6个偶数之和。
代码:

/*
 * 获取2~32之间(不包括32)的6个偶数,取得这6个偶数之和。
 * 作者:jiacy
 * 日期:2020-2-5
 * 
 * 
 */
public class sl912 {
	/*
	 * 
	 *   @param value1 搜索起始数字
         @param value2 搜索终止数字
         @return       返回6个偶数之和
	 */
	public static double Sum(double value1,double value2) {
		double sum = 0;    //和
		int count = 1;     //计数
		while(true) {
			int tmp = (int)value1 + (int)(Math.random() *(value2 - value1));//返回大于value1且小于value2的随机数
			if(tmp !=0 && tmp%2 == 0) {                             //如果是偶数,则相加
				System.out.println("第"+count +"个数为:"+tmp);
				sum = sum + tmp;
				count++;
			}
			if(count>6) //计数达到6个时终止循环
				break;
		}		
		return sum;
	}

	public static void main(String[] args) {
		System.out.println("6个偶数的总和为:" + Sum(2,32));

	}

}

结果:

1个数为:82个数为:23个数为:284个数为:165个数为:106个数为:14
6个偶数的总和为:78.0

2.题目:定义一个求圆面积的方法,其中以圆半径作为参数,并将计算结果保留5位小数
代码:

/*
 * 定义一个求圆面积的方法,其中以圆半径作为参数,并将计算结果保留5位小数
 * 作者:jiacy
 * 日期:2020-2-5
 */
import java.text.DecimalFormat;

public class sl913 {
	static public void SimpleFormat(String pattern, double value) {	//使用实例化对象时设置格式化模式
		DecimalFormat myFormat = new DecimalFormat(pattern);	//实例化DecimalFormat对象
		String output = myFormat.format(value);				//将数字进行格式化
		System.out.println(value + " " + pattern + " " + output); //输出原始数据值和格式化后的数据值
	}
	public static double GetRoundArea(double r){
		return Math.PI*Math.pow(r, 2);          //圆面积公式
	}

	public static void main(String[] args) {
		System.out.print("圆的面积为:");
		SimpleFormat("#.#####",GetRoundArea(2));    //以五位小数输出结果
	}

}

结果:

圆的面积为:12.566370614359172 #.##### 12.56637

你可能感兴趣的:(java)