【问题标题】:How do I convert from dot-separated money into comma-separated number如何从点分隔的钱转换为逗号分隔的数字
【发布时间】:2011-10-06 14:54:51
【问题描述】:

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

  • 39.44 美元
  • 0.523 美元
  • 1.336 美元

我想转换成:

  • 39,440,000 美元
  • 523,000 美元
  • 1,336,000 美元

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

【问题讨论】:

  • 请发布您的代码,以便人们可以帮助您修复它。
  • 输入值是字符串吗?

标签: java format currency csv


【解决方案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

【讨论】:

    【解决方案2】:

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

    以下代码会将“$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();
      }
    
    }
    

    【讨论】:

      【解决方案3】:

      不要将钱表示为双重。有些值对货币有效,不能用双精度(或浮点数)表示 这似乎是一种合理的技术:

      1. 确定要使用多少个零作为填充。存储此值。
      2. 删除美元符号和所有句点。 org.apache.commons.lang.StringUtils.strip(stringName, "$.") 会这样做
      3. 零填充填充到所需大小。
      4. 使用您想要的任何技术进行格式化。

      【讨论】:

        【解决方案4】:

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

        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 美元

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多