round - redondea hasta 2 decimales en java?
redondear float java (12)
Acabo de modificar tu código. Funciona bien en mi sistema. A ver si esto ayuda
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100.00;
System.out.println(roundOff);
}
}
Esta pregunta ya tiene una respuesta aquí:
- Cómo redondear un número a n decimales en Java 31 respuestas
He leído muchas preguntas sobre stackflow, pero ninguna parece funcionar para mí. Estoy usando math.round()
para redondear. este es el código:
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100;
System.out.println(roundOff);
}
}
el resultado que obtengo es: 123
pero quiero que sea 123.14
. He leído que agregar *100/100
ayudará, pero como puede ver, no logré que funcione.
es absolutamente esencial que tanto la entrada como la salida sean dobles.
Sería de gran ayuda si cambia la línea 4 del código anterior y lo publica.
Regrese a su código y reemplace 100
por 100.00
y avíseme si funciona. Sin embargo, si quieres ser formal, prueba esto:
import java.text.DecimalFormat;
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value);
double finalValue = (Double)df.parse(formate) ;
Sé que esta es una pregunta de hace 2 años, pero como cada cuerpo enfrenta un problema para redondear los valores en algún punto del tiempo. Me gustaría compartir una forma diferente que nos puede dar valores redondeados a cualquier escala usando la clase BigDecimal. Aquí tenemos puede evitar pasos adicionales que se requieren para obtener el valor final si usamos DecimalFormat("0.00")
o usando Math.round(a * 100) / 100
.
import java.math.BigDecimal;
public class RoundingNumbers {
public static void main(String args[]){
double number = 123.13698;
int decimalsToConsider = 2;
BigDecimal bigDecimal = new BigDecimal(number);
BigDecimal roundedWithScale = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("Rounded value with setting scale = "+roundedWithScale);
bigDecimal = new BigDecimal(number);
BigDecimal roundedValueWithDivideLogic = bigDecimal.divide(BigDecimal.ONE,decimalsToConsider,BigDecimal.ROUND_HALF_UP);
System.out.println("Rounded value with Dividing by one = "+roundedValueWithDivideLogic);
}
}
Este programa nos daría debajo de salida
Rounded value with setting scale = 123.14
Rounded value with Dividing by one = 123.14
Tratar :
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100;
String.format("%.3f", roundOff); //%.3f defines decimal precision you want
System.out.println(roundOff); }}
parece que te golpea la aritmética de enteros: en algunos idiomas (int) / (int) siempre se evaluará como aritmética de enteros. para forzar la aritmética de punto flotante, asegúrese de que al menos uno de los operandos sea no entero:
double roundOff = Math.round(a*100)/100.f;
Bueno, este funciona ...
double roundOff = Math.round(a * 100.0) / 100.0;
La salida es
123.14
O como dijo @Rufein
double roundOff = (double) Math.round(a * 100) / 100;
esto lo hará por ti también.
Esta es una larga pero una solución de prueba completa, nunca falla
Simplemente pase su número a esta función como un doble, lo devolverá redondeando el valor decimal hasta el valor más cercano de 5;
si 4.25, salida 4.25
si 4.20, Salida 4.20
si 4.24, Salida 4.20
si 4.26, Salida 4.30
si quieres redondear hasta 2 decimales, usa
DecimalFormat df = new DecimalFormat("#.##");
roundToMultipleOfFive(Double.valueOf(df.format(number)));
si hasta 3 lugares, nuevo DecimalFormat ("#. ###")
si hasta n lugares, nuevo DecimalFormat ("#. nTimes # ")
public double roundToMultipleOfFive(double x)
{
x=input.nextDouble();
String str=String.valueOf(x);
int pos=0;
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)==''.'')
{
pos=i;
break;
}
}
int after=Integer.parseInt(str.substring(pos+1,str.length()));
int Q=after/5;
int R =after%5;
if((Q%2)==0)
{
after=after-R;
}
else
{
if(5-R==5)
{
after=after;
}
else after=after+(5-R);
}
return Double.parseDouble(str.substring(0,pos+1).concat(String.valueOf(after))));
}
double d = 2.34568;
DecimalFormat f = new DecimalFormat("##.00");
System.out.println(f.format(d));
BigDecimal a = new BigDecimal("123.13698");
BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(roundOff);
String roundOffTo2DecPlaces(float val)
{
return String.format("%.2f", val);
}
double roundOff = Math.round(a*100)/100;
debiera ser
double roundOff = Math.round(a*100)/100D;
Agregar ''D'' a 100 lo hace doble literal, por lo tanto el resultado producido tendrá precisión
public static float roundFloat(float in) {
return ((int)((in*100f)+0.5f))/100f;
}
Debería estar bien para la mayoría de los casos. Todavía puede cambiar los tipos si quiere cumplir con los dobles por ejemplo.