第8 章 : 數字操作類
33 Math數學計算類
Math提供的方法都是static方法,都是基本數學公式
Math.abs(-10) // 10
Math.max(10, 1) // 10
Math.pow(10, 2) //100.0
Math.sqrt(9) //3.0
Math.round(10.4) // 10
Math.round(10.5) // 11
class MathUtil {
private MathUtil() {
}
// 自定義保留位數
public static double round(double num, int scale) {
return Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale);
}
}
class Demo {
public static void main(String[] args) {
System.out.println(MathUtil.round(10.98766, 2)); // 10.99
}
}
34 Random随機數生成類
import java.util.Random;
class Demo {
public static void main(String[] args) {
Random random = new Random();
// 産生随機數範圍[0, 10)
System.out.println(random.nextInt(10));
}
}
彩票号碼生成示例
import java.util.Random;
/**
* 随機示例
* 36 選 7
*/
class Demo {
public static int[] getCodeList(){
int[] data = new int[7];
int foot = 0;
Random random = new Random();
while (foot<7){
int code = random.nextInt(37);
if(isUse(code, data)){
data[foot++] = code;
}
}
return data;
}
// 檢查号碼是否可以使用,不能為0,不能重複
public static boolean isUse(int code, int[] temp){
if(code == 0){
return false;
}
for(int x : temp){
if(code == x){
return false;
}
}
return true;
}
public static void main(String[] args) {
int[] data = getCodeList();
for(int x : data){
System.out.print(x + ", ");
}
// 15, 19, 9, 11, 33, 2, 21,
}
}
35 大數字處理類
可以使用String儲存,不過操作麻煩
繼承體系
Object
-Number
-Integer
-Byte
-Long
-Short
-Float
-Double
-BigInteger
-BigDecimal
-Boolean
-Character
BigInteger 和 BigDecimal使用方法基本相似
過大的資料也會影響程式性能,優先使用基礎資料類型
減法運算
import java.math.BigInteger;
class Demo{
public static void main(String[] args) {
BigInteger big1 = new BigInteger("98960973126687599871");
BigInteger big2 = new BigInteger("98960973126687599872");
System.out.println(big2.subtract(big1));
// 1
}
}
求餘運算
import java.math.BigInteger;
class Demo{
public static void main(String[] args) {
BigInteger big1 = new BigInteger("1001");
BigInteger big2 = new BigInteger("10");
BigInteger[] ret = big1.divideAndRemainder(big2);
System.out.println(ret[0] + ", " + ret[1]);
// 100, 1
}
}
使用BigDecimal實作四舍五入進位
import java.math.BigDecimal;
import java.math.RoundingMode;
class MathUtil {
private MathUtil() {
}
// 自定義保留位數
public static double round(double num, int scale) {
return new BigDecimal(num).divide(
new BigDecimal(1.0), scale, RoundingMode.HALF_UP).doubleValue();
}
}
class Demo {
public static void main(String[] args) {
System.out.println(MathUtil.round(10.98766, 2)); // 10.99
}
}
Math使用的是基本資料類型,性能高于大資料處理類