2009-12-11 13 views
5

necesito redondear mi respuesta al décimo más cercano.decimal redondo al décimo más cercano

double finalPrice = everyMile + 2.8; 
    DecimalFormat fmt = new DecimalFormat("0.00"); 
    this.answerField.setText("£" + fmt.format(finalPrice) + " Approx"); 

el código anterior redondea un número entero al décimo más cercano, pero no redondeará un decimal. por ejemplo, 2.44 debe redondearse a 2.40

+2

contratando temporalmente Jon Skeet, por favor tenga en cuenta que no ** ** número escrito en decimal como X.1, x. 2, x.3, x.4, x.6, x.7, x.8 o x.9 se representan exactamente como un número de coma flotante. –

+0

No entiendo lo que dijo –

+3

Tómese el tiempo para entenderlo, ya que es importante. –

Respuesta

9

cambio un poco la patrón de código el cero final:

double finalPrice = 2.46; 
DecimalFormat fmt = new DecimalFormat("0.0'0'"); 
System.out.println("£" + fmt.format(finalPrice) + " Approx"); 

Ahora, si usted está manipulando dinero del mundo real, es mejor que no usar doble, pero int o BigInteger.

+0

MÁGICO. lol trabajado. entonces, al decir '0' significa que físicamente se pega 0 como el número final, no importa qué? –

+0

sí, significa eso. – Jerome

+0

dulce, gracias por su ayuda. Publiqué lo mismo en un foro diferente, después de 4 horas me refirieron sarcásticamente a Google. (que probé antes) chicos donde super rápido lol –

10

Use BigDecimal en su lugar.

Realmente, realmente no desea utilizar el punto flotante binario para los valores monetarios.

EDIT: round() no le permite especificar los lugares decimales, solo las cifras significativas. Aquí está una técnica algo más incómoda, pero funciona (suponiendo que desea truncar, básicamente):

import java.math.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     BigDecimal bd = new BigDecimal("20.44"); 
     bd = bd.movePointRight(1); 
     BigInteger floor = bd.toBigInteger(); 
     bd = new BigDecimal(floor).movePointLeft(1); 
     System.out.println(bd); 
    } 
} 

me gustaría a la esperanza que hay una manera más sencilla de hacer esto ...

+0

Se dio una manera más simple y rápida en la respuesta de @ Peter. – Vadzim

+1

@Vadzim: Eso es llamar al constructor 'BigDecimal (double)', que rara vez es una buena idea IMO. Y aún no sabemos qué quiere hacer el OP en términos de redondeo vs truncamiento. Pero bueno, es bueno tener múltiples opciones ... –

0

EDITAR

Prueba esto:

double d = 25.642; 
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.'))); 
System.out.println(s); 

Sé que esto es una manera estúpida, pero funciona.

+0

lo siento, eso no funcionó –

6

Esto da salida a 2.40

BigDecimal bd = new BigDecimal(2.44); 
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2)); 
1

intente lo siguiente: última observación

double finalPriceRoundedToNearestTenth = Math.round(10.0 * finalPrice)/10.0; 
Cuestiones relacionadas