Как мне конвертировать деньги, разделенные точками, в числа, разделенные запятыми? - PullRequest
0 голосов
/ 06 октября 2011

У меня есть следующие возможные входные значения, которые выражены в сокращенном виде:

  • $ 39,44
  • $ 0,523
  • 1,333

, которые я хотел бы преобразовать в:

  • 39 440 000
  • $ 523,000
  • $ 1,336,000

Я бы предпочел использовать общий подход, а не создавать странные строки, поэтому я попытался использовать DecimalFormat (java)объект, хотя я не получаю желаемых результатов.Любая помощь приветствуется.

Ответы [ 4 ]

1 голос
/ 06 октября 2011

По сути, все, что вам нужно сделать, это заменить запятые на точки, а точки на запятые.

В следующем коде значение «$ 2400.25» изменится на «$ 2.400.25».Если вы отправите пунктирную валюту через этот метод еще раз, вы получите версию с запятой.Это простая инверсия.

public class DotsToCommas {

  public static void main(String[] args) {
    String dotCurrency = "$2,400.35";
    String commaCurrency = invertCommasAndDots(dotCurrency);

    System.out.println(commaCurrency);
  }

  public static String invertCommasAndDots(String dotString) {
    StringBuffer outputBuffer = new StringBuffer();

    for (int i = 0; i < dotString.length(); i++) {
      if (dotString.charAt(i) == '.')
        outputBuffer.append(',');
      else if (dotString.charAt(i) == ',')
        outputBuffer.append('.');
      else
        outputBuffer.append(dotString.charAt(i));
    }

    return outputBuffer.toString();
  }

}
1 голос
/ 06 октября 2011

Вы имеете в виду, как это?

String[] values = "$39.44,£0.523,€1.336".split(",");
for (String value : values) {
    char ccy = value.charAt(0);
    double amount = Double.parseDouble(value.substring(1));
    System.out.printf("%s => %s%,d%n", value, ccy, (int)(amount * 1e6));
}

печать

$39.44 => $39,440,000
£0.523 => £523,000
€1.336 => €1,336,000
0 голосов
/ 07 октября 2011

Спасибо всем за ваши предложения и математику. Я сталкивался с этим решением:

public class convertMillions {

  public static void main(String[] args) {
    String currency = "$";
    char delimiter = ´,´;
    String value = "39.44";   //Example

    String commaCurrency = convert(value, currency, delimiter);
    System.out.println(commaCurrency);
  }


  public String convert(String value, String currency, char delimiter) {

     boolean zeroValue = value.isEmpty();
     if(zeroValue)
       return " ";  //Used when String is empty

     /*Convert into plain String number*/   
     double amount = Double.parseDouble(value.substring(0));
     String numberStr = String.valueOf((int)(amount * 1e6));

     /*Append unit (group separator) delimiter and currency*/
     double number = Double.valueOf(numberStr);
     String pattern = "###,###";
     DecimalFormat formatter;
     DecimalformatSymbols dfs = new DecimalFormatSymbols(Local.US);
     dfs.setGroupingSeparator(delimiter);

     formatter = new DecimalFormat(pattern, dfs);
     String cypher = formatter.format(number);      
     String money = currency.concat(cypher);

     return money;

   }
}

Введите:

  • 39,44
  • 0,523
  • 1,336
  • 7
  • 125

Выход:

  • $ 39.440.000
  • $ 523.000
  • $ 1.336.000
  • $ 7.000.000
  • $ 125.000.000
0 голосов
/ 06 октября 2011

Не представляйте деньги как двойные. Есть значения, которые действительны для денег, которые не могут быть представлены с двойным (или с плавающей точкой) Это кажется разумной техникой:

  1. Определите, сколько нулей вы хотите использовать в качестве заполнения. Сохраните это значение.
  2. Удалить знак доллара и все периоды. org.apache.commons.lang.StringUtils.strip(stringName, "$.") сделает это
  3. Заполнение нулями до нужного размера.
  4. Форматируйте, используя любую технику, какую пожелаете.
...