package com.itmuch.cloud.test;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Formatter;
/**
* @author:mischen
* @date:2020/3/27 22:02
*/
public class TestList {
/**
* 使用BigDecimal,保留小數點後兩位
*/
public static String format1(double value) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.toString();
}
/**
* 使用DecimalFormat,保留小數點後兩位
*/
public static String format2(double value) {
DecimalFormat df = new DecimalFormat("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
return df.format(value);
}
/**
* 使用NumberFormat,保留小數點後兩位
*/
public static String format3(double value) {
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
/*
* setMinimumFractionDigits設置成2
*
* 如果不這麼做,那麼當value的值是100.00的時候返回100
*
* 而不是100.00
*/
nf.setMinimumFractionDigits(2);
nf.setRoundingMode(RoundingMode.HALF_UP);
/*
* 如果想輸出的格式用逗號隔開,可以設置成true
*/
nf.setGroupingUsed(false);
return nf.format(value);
}
/**
* 使用java.util.Formatter,保留小數點後兩位
*/
public static String format4(double value) {
/*
* %.2f % 表示 小數點前任意位數 2 表示兩位小數 格式後的結果爲 f 表示浮點型
*/
return new Formatter().format("%.2f", value).toString();
}
/**
* 使用String.format來實現。
*
* 這個方法其實和format4是一樣的
*/
public static String format5(double value) {
return String.format("%.2f", value).toString();
}
/**
* 加法運算
*
* @param v1
* @param v2
* @return
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 減法運算
*
* @param v1被減數
* @param v2減數
* @return
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 乘法運算
*
* @param v1被乘數
* @param v2乘數
* @return
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
*
* 除法運算,當發生除不盡的情況時,精確到小數點以後2位,以後的數字四捨五入
*
* @param v1被除數
* @param v2除數
* @return
*/
public static double div(double v1, double v2) {
return div(v1, v2, 2);
}
/**
*
* 除法運算,當發生除不盡的情況時,由scale參數指定精度,以後的數字四捨五入
*
* @param v1被除數
* @param v2除數
* @param scale精確到小數點以後幾位
* @return
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*
* 四捨五入
*
* @param v需要四捨五入的數字
* @param scale小數點後保留幾位
* @return
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 判斷 a 與 b 是否相等
*
* @param a
* @param b
* @return a==b 返回true, a!=b 返回false
*/
public static boolean equal(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) == 0) {
return true;
}
return false;
}
/**
* 判斷 a 是否大於等於 b
*
* @param a
* @param b
* @return a>=b 返回true, a<b 返回false
*/
public static boolean greaterThanOrEqualTo(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) >= 0) {
return true;
}
return false;
}
/**
* 判斷 a 是否大於 b
*
* @param a
* @param b
* @return a>b 返回true, a<=b 返回 false
*/
public static boolean bigger(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) == 1) {
return true;
}
return false;
}
/**
* 判斷 a 是否小於 b
*
* @param a
* @param b
* @return a<b 返回true, a>=b 返回 false
*/
public static boolean lessThan(double a, double b) {
BigDecimal v1 = BigDecimal.valueOf(a);
BigDecimal v2 = BigDecimal.valueOf(b);
if (v1.compareTo(v2) == -1) {
return true;
}
return false;
}
public static void main(String[] args){
System.out.println(lessThan(101d,102d));
}
}