Tengo un objeto BigDecimal y quiero convertirlo a string.
El problema es que mi valor alcanzado fracción y me da un enorme número (en longitud) y sólo necesito el número original en cadena, por ejemplo:
para

BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());

la salida es:

10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375

y tengo la necesidad de poner fuera a ser exactamente el número 10.0001 en cadena

InformationsquelleAutor Yo Al | 2012-12-16

8 Comentarios

  1. 113

    Para conseguir exactamente 10.0001 que usted necesita para utilizar el constructor de Cadena o valueOf (que construye un BigDecimal basado en la representación canónica de la doble):

    BigDecimal bd = new BigDecimal("10.0001");
    System.out.println(bd.toString()); //prints 10.0001
    //or alternatively
    BigDecimal bd = BigDecimal.valueOf(10.0001);
    System.out.println(bd.toString()); //prints 10.0001

    El problema con new BigDecimal(10.0001) es que el argumento es una double y es que los dobles no puede representar 10.0001 exactamente. Así 10.0001 se «transforma» a los más cercanos posible doble, que es 10.000099999999999766941982670687139034271240234375 y eso es lo que su BigDecimal muestra.

    Por esa razón, rara vez tiene sentido usar el doble constructor.

    Usted puede leer más sobre ello aquí, Movimiento decimales en una doble

    • De una manera más eficiente de convertir un double de esta manera es utilizar BigDecimal.valueOf(double);
    • Seguro que no la entiendo. BigDecimal.valueOf(double) «rondas» el doble de la misma manera se duplica se redondearon al impreso, que utiliza algo complejo de reglas, así que no estoy seguro de cómo se puede confiar en eso.
    • Translates a double into a BigDecimal, using the double's canonical string representation provided by the Double.toString(double) method. Note: This is generally the preferred way to convert a double (or float) into a BigDecimal, as the value returned is equal to that resulting from constructing a BigDecimal from the result of using Double.toString(double).
    • Sí, sé que. Yo no sé cómo previsible es que Double.toString(double) devolverá el resultado esperado. Por ejemplo, Double.toString(99999999.21110999) devuelve 99999999.21111
    • Eso es cierto, pero en esa situación mediante el constructor no servirá de nada, usted tiene que utilizar el redondeo.
    • esta respuesta dosent realmente responder a la pregunta de ¿cómo convertir un BigDecimal a una Cadena.
    • Parecía evidente por lo que no se explicar. Modificado…

  2. 11

    Su BigDecimal no contiene el número 10.0001, porque se inicializa con un double, y el double no bastante contener el número que creía que sí. (Este es el punto entero de BigDecimal.)

    Si utiliza la cadena constructor lugar:

    BigDecimal bd = new BigDecimal("10.0001");

    …entonces que en realidad contienen el número que usted espera.

  3. 7

    Mediante el siguiente método puede convertir en java.de matemáticas.BigDecimal a la Cadena.

       BigDecimal bigDecimal = new BigDecimal("10.0001");
       String bigDecimalString = String.valueOf(bigDecimal.doubleValue());
       System.out.println("bigDecimal value in String: "+bigDecimalString);

    Salida:

    bigDecimal valor en la Cadena: 10.0001

  4. 4

    Para un mejor apoyo a las diferentes configuraciones utilizan de esta manera:

    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(2);
    df.setMinimumFractionDigits(0);
    df.setGroupingUsed(false);
    
    df.format(bigDecimal);

    también se puede personalizar:

    DecimalFormat df = new DecimalFormat("###,###,###");
    df.format(bigDecimal);
  5. 1
    //Convert BigDecimal number To String by using below method //
    
    public static String RemoveTrailingZeros(BigDecimal tempDecimal)
    {
        tempDecimal = tempDecimal.stripTrailingZeros();
        String tempString = tempDecimal.toPlainString();
        return tempString;
    }

    //Recall RemoveTrailingZeros
    BigDecimal output = new BigDecimal(0);
    String str = RemoveTrailingZeros(output);
  6. 0

    La BigDecimal no puede ser un doble.
    usted puede utilizar Int numero.
    si desea mostrar exactamente el número, puede utilizar el constructor de Cadena de BigDecimal .

    como este:

    BigDecimal bd1 = new BigDecimal("10.0001");

    ahora, usted puede mostrar bd1 como 10.0001

    Tan simple.
    LA BUENA SUERTE.

  7. 0

    Para archivar el resultado necesario con doble constructor deberá redondear la BigDecimal antes de convertirlo a String por ejemplo,

    nueva de java.de matemáticas.BigDecimal(10.0001).ronda(new java.de matemáticas.MathContext(6 de java.de matemáticas.RoundingMode.HALF_UP)).toString()

    imprimirá el «10.0001»

  8. 0

    Si usted sólo necesita establecer precisión la cantidad y redondear el valor, la manera correcta de hacer esto es utilizar el propio objeto.

    BigDecimal value = new BigDecimal("10.0001");
    value = value.setScale(4, RoundingMode.HALF_UP);
    System.out.println(value); //the return should be "10.0001"

    Uno de los pilares de la Orientada a Objeto (OOP) Programación es «encapsulación», este pilar también se dice que un objeto debe lidiar con sus propias operaciones, como en esta manera:

Dejar respuesta

Please enter your comment!
Please enter your name here