HOWTO · Java

Truncar duplo em Java

Este artigo descreve como truncar double em Java

Neste artigo, veremos como truncar ou arredondar um número para n pontos decimais em Java. Java fornece dois tipos primitivos para armazenar valores decimais que são double e float. Recomenda-se usar a classe BigDecimal para valores precisos ou arredondamentos.

Use DecimalFormat para truncar duplo em Java

DecimalFormat é uma subclasse de NumberFormat que pode formatar números decimais usando o padrão de formatação fornecido. Aqui no código abaixo, criamos um objeto de DecimalFormat passando um padrão de formatação adequado. Podemos chamar o método format() no objeto decimatFormat e passar nossa variável dupla d como um parâmetro.

O método format() retorna uma string que é truncada, conforme mostrado na saída.

import java.text.DecimalFormat;
public class DecimalFormatting {
  public static void main(String args[]) {
    double d = 9.4568982982989;
    String pattern = "#.###";
    DecimalFormat decimalFormat = new DecimalFormat(pattern);
    String formattedDouble = decimalFormat.format(d);
    System.out.println("Formatted double d = " + formattedDouble);
  }
}

Resultado:

Formatted double d = 9.457

Use BigDecimal para truncar duplo em Java

Em Java, BigDecimal são números decimais com sinal de precisão arbitrária imutáveis. Ele fornece controle sobre escala e precisão. Criamos um objeto BigDecimal passando o double convertido em string, evitando problemas com a representação de valores aproximados.

Em seguida, chamamos o método setScale(int newScale, RoundingMode roundingMode) neste objeto BigDecimal bd, que leva dois argumentos: a escala de BigDecimal a ser retornada e o outro é o modo de arredondamento a ser aplicado. O modo RoundingMode.FLOOR é arredondado para o infinito negativo.

public class DecimalFormatting {
  public static void main(String args[]) {
    double d = 9.4568982982989;
    BigDecimal bd = new BigDecimal(String.valueOf(d));
    BigDecimal rounded = bd.setScale(2, RoundingMode.FLOOR);
    System.out.println("BigDecimal rounded off : " + rounded);
  }
}

Resultado:

BigDecimal rounded off : 9.45

Use a biblioteca comum do Apache para truncar decimais em Java

Podemos conseguir o mesmo por esta biblioteca cuja dependência maven é fornecida abaixo.

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.5</version>
</dependency>

Podemos usar o método Precision.round() desta biblioteca para formatar decimal. Este método leva dois argumentos, um é a variável decimal a ser formatada e escala. Precisamos de 4 dígitos após o ponto decimal; portanto, essa é a escala de que precisamos. A saída mostra que os dígitos decimais estão truncados.

import org.apache.commons.math3.util.Precision;
public class DecimalFormatting {
  public static void main(String args[]) {
    double d = 9.4568982982989;
    double doubleP = Precision.round(d, 4);
    System.out.println("Precision rounded off : " + doubleP);
  }
}

Resultado:

Precision rounded off : 9.4569

Use java.lang.Math para truncar decimais em Java

Essa é outra maneira de arredondar números decimais em Java. O método Math.pow() controla o número n de casas decimais multiplicando e dividindo por 10n. Criamos uma dupla variável scale usando este método que leva dois argumentos, base 10 e potência 3.

Math.round() em Java é usado para arredondar um número para seu inteiro mais próximo. Isso é feito adicionando 1/2 ao número, falando sobre o resultado e convertendo o resultado em um tipo de dados inteiro. Este método não é recomendado, pois às vezes trunca o valor incorretamente.

public class DecimalFormatting {
  public static void main(String args[]) {
    double d = 9.4568982982989;
    double scale = Math.pow(10, 3);
    double doubleM1 = Math.round(d * scale) / scale;
    System.out.println("Math1 Rounded off: " + doubleM1);
  }
}

Resultado:

Math Rounded off: 9.45
Math1 Rounded off: 9.457