数字格式化在实际问题中使用非常普遍,比如超市的商品价格,需要保留两位有效数字。
在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.00‰ 789.00‰
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
一般通过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个数为:8
第2个数为:2
第3个数为:28
第4个数为:16
第5个数为:10
第6个数为: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