2012-01-11 23 views
5

Duplicar posible:
Round a double to 2 significant figures after decimal pointredondeo puntos decimales

estoy tratando de trabajar con un grado de conversión decimal (23.1248) en un grado minuto estilo (23 7'29.3"). esto es lo que tengo hasta ahora:

double a=23.1248; 
    int deg=(int)a;//gives me the degree 
    float b=(float) (a-deg); 
    int min=(int) (b*60);//gives me the minutes 
    double sec= (double) ((c*60)-min);//gives me my seconds 

todo funciona bien, pero me gustaría para redondear los segundos hasta la décima o la hundrenth más cercana. He observado el formato decimal, pero preferiría no convertirlo en una cadena. También he considerado bigdecimal, pero no creo que sea útil,

+0

hay un método redonda en js –

+0

pensé puntos decimales ya eran redondos. Y los signos menos, más los signos y la división eran planos :) Para "redondear hasta 100", simplemente usa "Math.round()": http://docs.oracle.com/javase/1.4.2/docs/api /java/lang/Math.html double x = round (y/100.0) * 100.0; – paulsm4

+0

BigDecimal funciona bien, puede crear una función redonda (números, decimales) como la de esta respuesta. Pruébalo, no veo por qué no funcionaría. http://stackoverflow.com/a/8911683/744859 –

Respuesta

11

Pruebe usar Math.round(double) en el número después de escalarlo, y luego reducirlo de nuevo.

double x = 1.234; 
double y = Math.round(x * 100.0)/100.0; // => 1.23 

También puede utilizar BigDecimal si usted quiere conseguir realmente el peso pesado:

BigDecimal a = new BigDecimal("1.234"); 
BigDecimal b = a.setScale(2, RoundingMode.DOWN); // => BigDecimal("1.23") 
0

En primer lugar, hay funciones de biblioteca para hacer esto, ¿por qué no usarlas? Ver Math.round(). No hay necesidad de reinventar la rueda. Si quisieras, podrías intentar lo que sigue. Para redondear un doble al lugar de las centésimas:

x = 0.01 * floor(x * 100.0) 

Para redondear un doble al lugar de la décima:

x = 0.1 * floor(x * 10.0) 

Para redondear un doble al lugar 10^k:

x = 10^k * floor(x/10^k) 

La implementación en cualquier idioma, incluido Java, debería ser sencilla. Un problema con esto es que realmente no redondea, sino que trunca, a su posición. Para solucionar esto, simplemente puede agregar 0.5 * 10^k a su número antes de redondear. Si solo desea redondear, use las versiones anteriores y agregue 10^k antes o después del cálculo.

+0

¿No le gustaría usar round() en lugar de floor()? Esperaría que 0.193 se redondeara a 0.2 si a 1dp. –

+0

@brainzzy Discuto cómo lograr lo mismo que redondear() y techo() usando la primitiva de piso() para los números de base 10. Pero esencialmente, sí, si quiere redondear al más cercano (en lugar de siempre hacia arriba o siempre hacia abajo), round() debería funcionar. – Patrick87

Cuestiones relacionadas