Feedback

what's your question? be descriptive.

By: Asked

Formatear decimales en java

como puedo formatear en java los decimales sin que me redonde por ejem: que formatee con 4 decimales 22.12345 –> 22.1234 y si es asi 22.12 que no quede 22.1199 sino 22.12; ya mire con BigDecimal, este hace asi 22.12 —> 22.1199 con NumberFormat si funciona como es pero cuando el numero es 22.12345 lo que hace es 22.1235

hay alguna clase de java que haga esto o toca hacerlo “manual”

  • 1

pescamillam

Pues es solo hacer un round_down, funciona para negativos y positivos como muestro a continuacion

package com.alliensoft.workflow.testclasses;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Hashtable;


/**
 * Date 9/03/2010.10:38:01
 * <p> pruebas de bigDecimal
 * pescamilla
 */
public class TestTest {

    /**
     * Date 9/03/2010.10:38:01
     * pescamilla
     * Exception Cualquier error ejecutando el constructor de cualquier prueba
     */
    public TestTest() throws Exception {
        int decimalPlaces = 2;
        BigDecimal bd = new BigDecimal("-123456789.0193456890");
        BigDecimal bd2 = new BigDecimal("123456789.0193456890");
        bd = bd.setScale(decimalPlaces, BigDecimal.ROUND_DOWN);
        bd2 = bd2.setScale(decimalPlaces, BigDecimal.ROUND_DOWN);
        System.out.println(bd.toString());
        System.out.println(bd2.toString());
    }

    /**
     * Date 9/03/2010.10:38:01
     * <p>Clase main
     * pescamilla
     * args argumentos no necesarios
     */
    public static void main(String[] args) {
        try {
            new TestTest();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
NN comments
arval
-

gracias pescamilla, bueno estaba buena esta solo que hay un problema con los siguiente datos: int decimalPlaces = 6; BigDecimal bd = new BigDecimal(“123456789.019”); arroja este resultado 123456789.019000 y deberia ser este 123456789.019; no hay una forma de que no le ponga los 0?

pescamillam
-
Para los ceros que quedan después del punto decimal existe un método de big decimal que los quita, para el ejemplo propuesto sería cambiar los sysos por

System.out.println(bd.stripTrailingZeros());
System.out.println(bd2.stripTrailingZeros());
or Cancel