1. Cuando el campo de definición requiere alta precisión, generalmente se usa el BigDecimal
tipo.
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) double
El 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ó BigDecimal
exactamente igual 0.1116666
, pero en realidad es igual 0.111666600000000004744293846670188941061496734619140625
. Esto se debe a que 0.1116666
no 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 String
mé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 String
primero el método de construcción.
3) Cuando un Double
tipo d se double
convierte en BigDeciamal
, puede usar el primer Double.toString(double)
método o String.valueOf(double)
métodos double
convertidos en String
tipo, y luego llamar al BigDeciamal
parámetro para String
el tipo de método de construcción, que es equivalente al valor real.
3. BigDecimal
Explicación detallada de los métodos comunes
1) Métodos comunes
add(BigDecimal)
: BigDecimal
agregue los valores en el objeto para devolver el BigDecimal
objeto
subtract(BigDecimal)
: BigDecimal
Resta los valores del BigDecimal
objeto y devuelve el objeto.
multiply(BigDecimal)
: BigDecimal
Multiplica los valores en el objeto para devolver el BigDecimal
objeto
divide(BigDecimal)
: BigDecimal
Divide el valor en el BigDecimal
objeto y devuelve el objeto
toString()
: Convierte BigDecimal
el valor del objeto en una cadena
doubleValue()
: Convierte BigDecimal
el valor del objeto en un número de precisión doble
floatValue()
: Convierte BigDecimal
el valor del objeto en un solo número de precisión
longValue()
: Convierte BigDecimal
el valor del objeto en un entero largo
intValue()
: Convierta BigDecimal
el valor en el objeto a un número entero
2), BigDecimal
comparación de tamaño
Java BigDecimal
generalmente usa bigdemical
el compareTo
método para comparar tamaños
int a = bigdemical.compareTo(bigdemical2)
Análisis de resultados de devolución:
a = -1, significa bigdemical
menor que bigdemical2
;
a = 0, significa bigdemical
igual bigdemical2
;
a = 1, significa bigdemical
mayor 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 BigDecimal
de formato de moneda y porcentaje como ejemplo. Primero, cree un BigDecimal
objeto, después de realizar BigDecimal
operaciones aritméticas, establezca respectivamente referencias al formato de moneda y porcentaje, y finalmente use el BigDecimal
objeto 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. BigDecimal
Resumen
1). Se usa cuando se necesitan cálculos decimales exactos BigDecimal
. BigDecimal
La relación de rendimiento double
y float
pobreza 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 String
el constructor con el tipo de parámetro .