Math:Java编程中数学计算工具类
JDK提供基本的数学计算公式,这些操作都通过Math类进行包装,本课程主要讲解在Java编程中Math类的基本作用以及四舍五入操作
java.lang.Math类是在整个Java之中提供的一个数学计算的程序功能类,利用这个程序功能类可以非常方便的执行一些基础的数学计算:对数、三角函数、开方,这个类是在JDK 1.0的时候提供给我们用户使用的,同时在这个类中不提供有构造方法。
类构造方法私有化的原因有两点:
1 需要控制当前类中的实例化对象的个数,所谓的单例设计模式、多例设计模式;
2 类中没有提供普通的成员属性,并且类中的成员都是static声明,方法也采用的static声明。
在Math类的成员里面提供有两个公共的全局常量:E、PI。
除了给出的常量之外,在Math类中全部的方法几乎都是static类型定义的方法,那么下面来通过具体的程序观察这些计算公式的使用。
范例:使用Math实现数学公式的调用
package com.yootk.demo;
public class YootkDemo { // 李兴华编程训练营:yootk
public static void main(String[] args) throws Exception {
System.out.println("【绝对值】" + Math.abs(-10.3)); // 10.3
System.out.println("【最大值】" + Math.max(10, 30)); // 30
System.out.println("【最小值】" + Math.min(10, 30)); // 10
System.out.println("【正弦值】" + Math.sin(3.56)); // -0.4063057021444168
System.out.println("【对数值】" + Math.log(20)); // 2.995732273553991
}
}
以上的几个操作是数学之中最为常见的几种计算公式,但是对于Math类来说里面有一个比较头疼的方法,这个方法就是进行四舍五入的处理操作,此方法定义如下:
public static long round(double a)
但是这个round()方法的实现计算结果可能和传统的认知是有差别的(就需要特别注意,同时也是面试中会问到的问题)
范例:使用Math.round()完成四舍五入
package com.yootk.demo;
public class YootkDemo { // 李兴华编程训练营:yootk
public static void main(String[] args) throws Exception {
System.out.println("【四舍五入】" + Math.round(15.1)); // 15
System.out.println("【四舍五入】" + Math.round(15.51)); // 16
System.out.println("【四舍五入】" + Math.round(-15.1)); // -15
System.out.println("【四舍五入】" + Math.round(-15.51)); // -16
}
}
在使用Math类实现四舍五入处理的过程之中,如果要操作的数值为负数,那么这个时候如果小数点的内容超过了“0.5”,则会自动的进行进位处理。但是虽然在Math类中提供有四舍五入的处理方法,可是这个四舍五入的处理方法会将全部的小数位进行整体的进位处理,这样的处理模式一定是存在有问题的。
例如:有一家公司每年的收入都是以亿为单位的,今年的收入达到了3.467812亿,如果说要使用了Math.round()方法实现了四舍五入,最终就表示只有3亿的收入,那么请问其余的4000多万去了那里?如果要想解决这样的问题就需要开发者自己去定义一个新的四舍五入的处理方法。
范例:实现自定义四舍五入操作
package com.yootk.util;
/**
* 该类是一个自定义的数学工具类,可以弥补Math类的不足
* @author 李兴华
*/
public class MathUtil {
private MathUtil() {} // 不存在成员属性,构造方法私有化
/**
* 进行准确位数的四舍五入的处理操作
* @param num 表示要进行处理的数字
* @param scale 表示要保留的小数位数
* @return 四舍五入处理后的结果
*/
public static double round(double num, int scale) {
return Math.round(num * Math.pow(10.0, scale)) / Math.pow(10.0, scale);
}
}
在本工具类里面可以发现最终还是依靠Math类实现了四舍五入的处理操作,在Math类中由于round()方法不保留有小数位数,所以首先让数据进行一个整倍的扩充,随后在计算完成后再除以相应的倍数,就得到了正确的四舍五入结果。
范例:实现数学工具类的调用
package com.yootk.demo;
import com.yootk.util.MathUtil;
public class YootkDemo { // 李兴华编程训练营:yootk
public static void main(String[] args) throws Exception {
System.out.println("【四舍五入】" + MathUtil.round(15.3829489, 3)); // 15
}
}
这种四舍五入的实现思想不仅仅用于Java技术上,实际上各个语言都有同样的操作实现,理解思路是最为重要的。
举报/反馈