Я пытаюсь прочитать некоторые значения BigDecimal из строки. Скажем, у меня есть строка: «1,000,000,000.999999999999999», и я хочу получить из нее BigDecimal. Как это сделать?
Во-первых, мне не нравятся решения с заменой строк (заменой запятых и т. Д.). Я думаю, что должен быть какой-нибудь аккуратный форматтер, который сделает эту работу за меня.
Я нашел класс DecimalFormatter, однако, поскольку он работает через double, теряется огромная точность.
Итак, как я могу это сделать?
java
parsing
bigdecimal
bezmax
источник
источник
BigDecimal
.Ответы:
Проверьте
setParseBigDecimal
в DecimalFormat. С помощью этого установщикаparse
вернет вам BigDecimal.источник
Полный код, подтверждающий, что не
NumberFormatException
выброшено:Вывод
источник
1000000000.999999999999999
DecimalFormatSymbols.getInstance().getGroupingSeparator()
вместо запятой, не нужно волноваться по поводу разных языков.Следующий пример кода работает хорошо (языковой стандарт необходимо получать динамически)
источник
Код мог бы быть чище, но, похоже, это помогает для разных языков.
источник
Вот как бы я это сделал:
Очевидно, если бы это происходило в производственном коде, это было бы не так просто.
Я не вижу проблем с простым удалением запятых из строки.
источник
Мне нужно было решение для преобразования String в BigDecimal без знания языкового стандарта и независимости от языкового стандарта. Я не смог найти стандартного решения этой проблемы, поэтому написал свой собственный вспомогательный метод. Может быть, и кому-то поможет:
Обновление: Внимание! Этот вспомогательный метод работает только с десятичными числами, поэтому числа всегда имеют десятичную точку! В противном случае вспомогательный метод может выдать неверный результат для чисел от 1000 до 999999 (плюс / минус). Спасибо bezmax за его большой вклад!
Конечно, я проверил метод:
источник
7,333
представляет? Это 7333 или 7 и 1/3 (7,333)? В разных регионах этот номер будет анализироваться по-разному. Вот доказательство концепции: ideone.com/Ue9rT8удалит все символы, кроме цифр и точки из вашей строки.
Чтобы сделать его зависимым от локали, вы можете использовать
getDecimalSeparator()
fromjava.text.DecimalFormatSymbols
. Я не знаю Java, но это может выглядеть так:источник
Старая тема, но, возможно, проще всего использовать Apache Commons NumberUtils, у которого есть метод createBigDecimal (String value) ....
Я предполагаю (надеюсь), что он принимает во внимание локали, иначе это было бы бесполезно.
источник
Пожалуйста, попробуйте, это сработает для меня
источник