Есть ли способ назначить отформатированное число BigDecimal для BigDecimal? - PullRequest
1 голос
/ 06 июня 2019

У меня есть кусок кода, который имеет две переменные BigDecimal.Обе переменные отправляются в формате метода (который работает нормально), а затем распечатываются.Переменная «d» отправляется в метод форматирования, а затем печатается напрямую, не присваивая ее (поскольку формат метода возвращает строку).Проблема возникает в переменной a, где я присваиваю форматированное значение (которое является строкой), преобразовываю его в bigDecimal и затем сохраняю в переменную a.Формат сохраняется, когда я печатаю значение a, но формат отсутствует, когда я печатаю переменную d.Как я могу присвоить отформатированное значение, не теряя его формат для переменной BigDecimal?

public static void main(String[] args) {
    BigDecimal d = new BigDecimal("0.0005");
    BigDecimal a = new BigDecimal(format(d, 2));

    System.out.println(a); // 0.000500
    System.out.println(format(new BigDecimal("0.00001"), 3)); // 1.000E-5
}

private static String format(BigDecimal x, int scale) {
    NumberFormat formatter = new DecimalFormat("0.0E0");
    formatter.setRoundingMode(RoundingMode.HALF_UP);
    formatter.setMinimumFractionDigits(scale);
    return formatter.format(x);
}

1 Ответ

3 голосов
/ 06 июня 2019

Числа (независимо от того, что это - BigDecima, Float, Long) предназначены для хранения значений (наиболее точных), а не их представления String. Вы не можете «сохранить отформатированное значение» как число и ожидать, что оно будет представлено таким образом все время. Каждый раз, когда вы хотите отформатировать значение, вы должны отформатировать его.

так вот

BigDecimal a = new BigDecimal(format(d, 2));

вы просто создаете новый BigDecimal, используя некоторое отформатированное число, которое является строкой. Эта строка анализируется до числа, и это все.

То, что вы ожидаете, похоже на то, что вы хотите, чтобы «строка» хранилась «как есть» в двоичной системе - поскольку это то, как числа хранятся физически. Нет, это все еще будет куча единиц и нулей.

...