Necesito formatear un flotador a "n" decimales.
estaba intentando BigDecimal, pero el valor de retorno no es correcto ...
public static float Redondear(float pNumero, int pCantidadDecimales) {
// the function is call with the values Redondear(625.3f, 2)
BigDecimal value = new BigDecimal(pNumero);
value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
return value.floatValue(); // but here the values is 625.3
}
Necesito devolver un valor flotante con el número de decimales que especifico.
Necesito Float
valor de retorno noDouble
.
String.format(java.util.Locale.US,"%.2f", floatValue);
Echa un vistazo a DecimalFormat . Puede usarlo fácilmente para tomar un número y asignarle un número determinado de decimales.
Editar : Ejemplo
fuente
DecimalFormat
se desaconseja el uso del constructor, vea mi respuesta para un uso correcto deNumberFormat
.Prueba esto, esto me ayudó mucho
El resultado será roundfinalPrice -> 5652.26
fuente
Es de destacar que
DecimalFormat
se desaconseja el uso del constructor. El javadoc para esta clase dice:https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
Entonces, lo que debe hacer es (por ejemplo):
fuente
Aquí hay una muestra rápida usando la
DecimalFormat
clase mencionada por Nick.El resultado de la declaración de impresión será 12.35. Tenga en cuenta que lo redondeará por usted.
fuente
DecimalFormat
constructor, vea mi respuesta para un uso correcto deNumberFormat
.Un poco sorprendido de que nadie haya señalado la forma directa de hacerlo, lo cual es bastante fácil.
Sin embargo, estoy bastante seguro de que esto no hace redondeo a medias.
Por lo que vale, el redondeo a la mitad será caótico e impredecible cada vez que mezcle valores de punto flotante basados en binarios con aritmética de base 10. Estoy bastante seguro de que no se puede hacer. El problema básico es que un valor como 1.105 no se puede representar exactamente en coma flotante. El valor de coma flotante será algo así como 1.105000000000001 o 1.104999999999999. Por lo tanto, cualquier intento de realizar redondeos a medias se tropezará con errores de codificación representativa.
Las implementaciones de punto flotante IEEE harán medio redondeo, pero hacen medio redondeo binario, no medio redondeo decimal. Entonces probablemente estés bien
fuente
pow
es una operación demasiado costosa para redondear.fuente
Esta es una forma mucho menos profesional y mucho más costosa, pero debería ser más fácil de entender y más útil para los principiantes.
fuente
Creo que lo que quieres es
y use el valor de retorno para mostrar.
siempre devolverá 625.3 porque se usa principalmente para calcular algo.
fuente
¡Estaba buscando una respuesta a esta pregunta y luego desarrollé un método! :) Una advertencia justa, está redondeando el valor.
fuente