Преобразование входного значения double или float в формат валюты США в java

Ввод: плавающая или двойная сумма.

Вывод: число или строка в формате валюты США.

В настоящее время я использую DecimalFormater для преобразования float или double. Результатом является сумма в строковом формате.

Для форматирования в американском денежном формате Am используется NumberFormat.getInstance (Locale.US) .format (- Input Value--). Но принимаемое входное значение - это только числовой стиль данных, а не строковый тип данных.

Таким образом, ввод от DecimalFormater нельзя использовать в качестве ввода для NumberFormat

Пробовал использовать класс Wrapper для преобразования строки в определенный числовой тип. Но округление до двух десятичных знаков не работает в исключительных случаях.

Метод преобразования двойного значения в строку и двойного в американский формат

 public static string doubleInTwoDecimalPoint(double value) {
    		DecimalFormat df =  new DecimalFormat("####0.00");
    		String doubleInStringRep =  df.format(value);
    		return doubleInStringRep;
    	}

    public static void convertToUSFormat(double amount) {           
           
    System.out.println(NumberFormat.getInstance(Locale.US).format(amount));
         }

Пожалуйста, поделитесь своим текущим кодом, без него сложно понять вопрос.

Mureinik 14.09.2018 14:32

@Mureinik Обновлено с кодом

Nandakumar Kadavannoore 14.09.2018 14:37

Вы просто хотите, чтобы число float / double было округлено до двух цифр?

Julius Hörger 14.09.2018 14:48

Вероятно, вам нужен NumberFormat.getCurrencyInstance, а не NumberFormat.getInstance.

VGR 14.09.2018 16:40

Необходимо округлить число с плавающей запятой / число до двух десятичных знаков. Но NumberFormat.getCurrencyInstance или NumberFormat.getInstance требует, чтобы значение было в числовом значении для формата.

Nandakumar Kadavannoore 17.09.2018 07:57
Не используйте double для валюты.
Raedwald 20.09.2019 11:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
1 115
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать NumberFormat :: getCurrencyInstance, который будет форматировать Locale, который вы ему передадите.

System.out.println(NumberFormat.getCurrencyInstance(Locale.US).format(amount));

Пример:

Вход:

123.4567

Выход:

$123.46

Спасибо. Но что делать, если входное значение (количество) представляет собой строку, а не числовой тип.

Nandakumar Kadavannoore 17.09.2018 07:55

Если введен String, измените строку на: System.out.println(NumberFormat.getCurrencyInstance(Locale.U‌​S).format(Double.val‌​ueOf(amount))); .

achAmháin 17.09.2018 10:13

Используя System.out.println (NumberFormat.getCurrencyInstance (Locale.U‌ S) .format (Double.val‌ ueOf (amount))). Я получаю ошибку как java.lang.IllegalArgumentException

Nandakumar Kadavannoore 17.09.2018 10:42

@NandakumarKadavannoore Я не уверен, как вы его используете, но посмотрите здесь: ideone.com/PJzz19

achAmháin 17.09.2018 10:46

Другие вопросы по теме