Tipo BigDecimal en Java

1. Cuando el campo de definición requiere alta precisión, generalmente se usa el BigDecimaltipo.
2. El constructor de uso común
BigDecimal(int)crea un objeto
BigDecimal(double)con el valor entero especificado por el parámetro. Crea un objeto con el valor de doble precisión especificado por el parámetro.
BigDecimal(long)Crea un objeto con el valor entero largo
BigDecimal(String)especificado por el parámetro. Crea un objeto con el valor especificado por el parámetro en una cadena. Los objetos
pueden crear directamente objetos BigDecimal y pasar los valores correspondientes de diferentes tipos, sin embargo, al pasar valores flotantes y dobles, se producirán algunas situaciones impredecibles.

double aa = 0.1116666;
BigDecimal bb = new BigDecimal(aa);
System.out.println("bb的值为"+bb);

Los resultados son los siguientes:

bb的值为0.111666600000000004744293846670188941061496734619140625

Análisis de causa:

1) doubleEl resultado del método de construcción con el tipo de parámetro es algo impredecible. Uno podría pensar que escribir en Java newBigDecimal(0.1116666)creó BigDecimalexactamente igual 0.1116666, pero en realidad es igual 0.111666600000000004744293846670188941061496734619140625. Esto se debe a que 0.1116666no se puede expresar con precisión como double(o, en este caso, no se puede expresar como un decimal binario de longitud finita). El valor pasado al constructor no será exactamente igual 0.1116666(aunque en la superficie es igual a este valor).

2) El Stringmétodo de construcción es completamente predecible: la escritura newBigDecimal(“0.1116666”)creará un BigDecimal, que es exactamente igual al esperado 0.1116666. Por lo tanto, en comparación, generalmente se recomienda utilizar Stringprimero el método de construcción.

3) Cuando un Doubletipo d se doubleconvierte en BigDeciamal, puede usar el primer Double.toString(double)método o String.valueOf(double)métodos doubleconvertidos en Stringtipo, y luego llamar al BigDeciamalparámetro para Stringel tipo de método de construcción, que es equivalente al valor real.
3. BigDecimalExplicación detallada de los métodos comunes
1) Métodos comunes
add(BigDecimal): BigDecimalagregue los valores en el objeto para devolver el BigDecimalobjeto

subtract(BigDecimal): BigDecimalResta los valores del BigDecimalobjeto y devuelve el objeto.

multiply(BigDecimal): BigDecimalMultiplica los valores en el objeto para devolver el BigDecimalobjeto

divide(BigDecimal): BigDecimalDivide el valor en el BigDecimalobjeto y devuelve el objeto

toString(): Convierte BigDecimalel valor del objeto en una cadena

doubleValue(): Convierte BigDecimalel valor del objeto en un número de precisión doble

floatValue(): Convierte BigDecimalel valor del objeto en un solo número de precisión

longValue(): Convierte BigDecimalel valor del objeto en un entero largo

intValue(): Convierta BigDecimalel valor en el objeto a un número entero
2), BigDecimalcomparación de tamaño
Java BigDecimalgeneralmente usa bigdemicalel compareTométodo para comparar tamaños

int a = bigdemical.compareTo(bigdemical2)

Análisis de resultados de devolución:

a = -1, significa bigdemicalmenor que bigdemical2;
a = 0, significa bigdemicaligual bigdemical2;
a = 1, significa bigdemicalmayor que bigdemical2;
por ejemplo: a es mayor o igual que b

new bigdemica(a).compareTo(new bigdemical(b)) >= 0

4. BigDecima````格式化 由于Formato de 类的formato numérico () 方法可以使用BigDecimal 对象作为其参数,可以利用BigDecimal``` realiza el control de formato en valores de moneda, valores porcentuales y valores generales que superan los 16 dígitos significativos.

Tome el uso BigDecimalde formato de moneda y porcentaje como ejemplo. Primero, cree un BigDecimalobjeto, después de realizar BigDecimaloperaciones aritméticas, establezca respectivamente referencias al formato de moneda y porcentaje, y finalmente use el BigDecimalobjeto como un format()parámetro de método para generar su valor de moneda formateado y porcentaje.

    NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用 
    NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用 
    percent.setMaximumFractionDigits(3); //百分比小数点最多3位 
    
    BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额
    BigDecimal interestRate = new BigDecimal("0.008"); //利率   
    BigDecimal interest = loanAmount.multiply(interestRate); //相乘
 
    System.out.println("贷款金额:\t" + currency.format(loanAmount)); 
    System.out.println("利率:\t" + percent.format(interestRate)); 
    System.out.println("利息:\t" + currency.format(interest)); 

resultado:

贷款金额: ¥15,000.48 利率: 0.8% 利息: ¥120.00

5. BigDecimalResumen
1). Se usa cuando se necesitan cálculos decimales exactos BigDecimal. BigDecimalLa relación de rendimiento doubley floatpobreza son especialmente evidentes cuando se trata de cálculos grandes y complejos. Por tanto, el cálculo de la precisión general no es necesario BigDecimal.
2) Intente utilizar Stringel constructor con el tipo de parámetro .

Supongo que te gusta

Origin blog.csdn.net/weixin_43213064/article/details/109562365
Recomendado
Clasificación