Durante o desenvolvimento, muitas vezes usamos BigDecimal em vez de um duplo efeito, a expressão mais precisa, utilizando a seguinte parte exemplar
1: obter a soma de duas casas decimais
public static BigDecimal add(double num1, double num2){
BigDecimal bignum1 = new BigDecimal(num1);
BigDecimal bignum2 = new BigDecimal(num2);
return bignum1.add(bignum2);
}
2: Obter a subtração de duas casas decimais
public static BigDecimal subtract(double num1, double num2){
BigDecimal bignum1 = new BigDecimal(num1);
BigDecimal bignum2 = new BigDecimal(num2);
return bignum1.subtract(bignum2);
}
3: Get multiplicando dois decimal
public static BigDecimal multiply(double num1, double num2){
BigDecimal bignum1 = new BigDecimal(num1);
BigDecimal bignum2 = new BigDecimal(num2);
return bignum1.multiply(bignum2);
}
4: Obter os divisão duas casas decimais
public static BigDecimal divide(double num1, double num2){
BigDecimal bignum1 = new BigDecimal(num1);
BigDecimal bignum2 = new BigDecimal(num2);
return bignum1.divide(bignum2,2,BigDecimal.ROUND_DOWN);
}
Descrição: Nota: A divisão do tempo deve passar por um segundo método parâmetro dividir, definir com precisão de vários ponto decimal, ou no caso não se divide, o resultado é uma casa decimal infinita, ele irá lançar uma exceção:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
método de divisão: bignum1 dividida bignum2, duas casas decimais
extra bits tem bit de processamento, 4.233-> 4,24:
bignum1.divide (bignum2,2, BigDecimal.ROUND_UP );
extra de bits de tomar a rejeição, 4.233-> 4,23:
bignum1.divide (bignum2,2, BigDecimal.ROUND_DOWN );
arredondado, 4.255-> 4,26:
bignum1.divide (bignum2,2, BigDecimal.ROUND_HALF_UP );
cinco off e seis, 4.255-> 4.25:
bignum1.divide (bignum2,2, o BigDecimal. ROUND_HALF_DOWN );
por cento Get (dois divisão decimal): 5
/**
* 获取百分率
*
* @param num 所求占比数据
* @param total 总数据量
* @param scale 精确到第几位
* @return
*/
public static String accuracy(double num, double total, int scale) {
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
//可以设置精确几位小数
df.setMaximumFractionDigits(scale);
//模式 例如四舍五入
df.setRoundingMode(RoundingMode.HALF_UP);
double accuracy_num = num / total * 100;
return df.format(accuracy_num) + "%";
}
Obtém percentagem (dupla conversão)
double pi=3.1415927;//圆周率
//以百分比方式计数,并取两位小数
new DecimalFormat("#.##%").format(pi);//314.16%