При работе с двойными и длинными числами в Java вы увидите, что большая часть значений отображается в экспоненциальной форме.
Например: в следующем примере мы умножаем 2,35 на 10000 и выводим результат.
//Division example
Double a = 2.85d / 10000;
System.out.println("1. " + a.doubleValue());
//Multiplication example
a = 2.85d * 100000000;
System.out.println("2. " + a.doubleValue());
Результат:
- 2.85E-4
- 2.85E8
Таким образом, вы можете увидеть результат, напечатанный в экспоненциальном формате. Теперь вы можете отобразить результат в чистом десятичном формате, например: 0,000285 или 285000000. Это можно сделать просто с помощью класса java.math.BigDecimal
. В следующем примере мы используем BigDecimal.valueOf()
для преобразования значения Double в BigDecimal
и затем .toPlainString()
для преобразования его в обычную десятичную строку.
import java.math.BigDecimal;
//..
//..
//Division example
Double a = 2.85d / 10000;
System.out.println("1. " + BigDecimal.valueOf(a).toPlainString());
//Multiplication example
a = 2.85d * 100000000;
System.out.println("2. " + BigDecimal.valueOf(a).toPlainString());
Результат:
- 0,000285
- 285000000
Единственный недостаток вышеописанного метода заключается в том, что он генерирует длинные строки числа. Вы можете ограничить значение и округлить число до 5 или 6 десятичных знаков. Для этого вы можете использовать java.text.DecimalFormat
класс. В следующем примере мы округляем число до четвертого десятичного знака и печатаем вывод.
import java.text.DecimalFormat;
//..
//..
Double a = 2.85d / 10000;
DecimalFormat formatter = new DecimalFormat("0.0000");
System.out.println(formatter .format(a));
Результат:
0,0003
Я только что попытался сжать этот код одной строкой, он напечатает значение 'a' с двумя десятичными знаками:
new DecimalFormat("0.00").format(BigDecimal.valueOf(a).toPlainString());
Счастливое преобразование:)