如何将点分钱转换为逗号分隔数

时间:2011-10-06 14:54:52

标签: java format currency csv

我有以下可能的输入值,以缩写的方式表示:

  • $ 39.44
  • $ 0.523
  • $ 1.336

我想将其转换为:

  • $ 39440000
  • $五十二万三
  • $一百三十三万六千

我更喜欢使用通用方法而不是构建奇怪的字符串,所以我尝试使用DecimalFormat(java)对象,尽管我没有得到理想的结果。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

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

答案 1 :(得分:1)

基本上你所要做的就是用点替换逗号,用逗号替换点。

以下代码将“$ 2,400.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();
  }

}

答案 2 :(得分:0)

不要把钱代表双倍。有些货币对货币有效,不能用双(或浮点数)表示 这似乎是一种合理的技术:

  1. 确定要用作填充的零个数。存储此值。
  2. 删除美元符号和所有期间。 org.apache.commons.lang.StringUtils.strip(stringName, "$.")将执行此操作
  3. 将零填充填充到所需的大小。
  4. 使用您想要的技术格式化。

答案 3 :(得分:0)

谢谢大家的建议和数学。我遇到了这个解决方案:

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

<强>输出:

  • $三九四四○○○○
  • $ 523000
  • $一百三十三万六千
  • $ 7,000,000
  • $ 125,000,000