【问题标题】:Converting Integer to String with comma for thousands用逗号将整数转换为字符串数千
【发布时间】:2011-10-27 13:34:34
【问题描述】:

我想将整数 35634646 转换成千位“,”,所以应该是 35,634,646。

最快的方法是什么?

【问题讨论】:

    标签: java string integer


    【解决方案1】:

    这也是一种可以用任何字符替换默认分隔符的方法:

    val myNumber = NumberFormat.getNumberInstance(Locale.US)
       .format(123456789)
       .replace(",", "،")
    

    【讨论】:

      【解决方案2】:

      使用扩展

      import java.text.NumberFormat
      
      val Int.commaString: String
        get() = NumberFormat.getInstance().format(this)
      
      val String.commaString: String
        get() = NumberFormat.getNumberInstance().format(this.toDouble())
      
      val Long.commaString: String
        get() = NumberFormat.getInstance().format(this)
      
      val Double.commaString: String
        get() = NumberFormat.getInstance().format(this)
      

      结果

      1234.commaString => 1,234
      "1234.456".commaString => 1,234.456
      1234567890123456789.commaString => 1,234,567,890,123,456,789
      1234.456.commaString => 1,234.456
      

      【讨论】:

        【解决方案3】:
         int value = 35634646;
         DecimalFormat myFormatter = new DecimalFormat("#,###");
         String output = myFormatter.format(value);
         System.out.println(output);
        

        输出:35,634,646

        【讨论】:

        • 您的模式不必超过#,###,如果您想要欧式格式,那么您可以使用#,##,###
        • @Ali:你描述的格式只在印度使用,我至少有 90% 的把握印度不在欧洲。
        • 我明白了...很好,如果您需要印度格式,那么您就是这样做的。
        • 这取决于语言环境,如果在默认语言环境不使用, 分隔数千的情况下运行,则不会产生正确的(根据问题)输出。
        【解决方案4】:

        对于那些无法访问“numberformat”或“String.format”(在框架内使用有限版本的 java)的人来说,这是一个解决方案。希望有用。

        number= 123456789;
        thousandsSeparator=",";
        myNumberString=number.toString();   
        numberLength=myNumberString.length;
        howManySeparators=Math.floor((numberLength-1)/3)
        formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
        while (howManySeparators>0)    {
        formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
        howManySeparators=howManySeparators-1;    }
        
        formattedString
        

        【讨论】:

        • 考虑到edit 你的答案,在你的代码中添加一些 cmets(也许将它包装在一个方法中,这样它会更有用)
        【解决方案5】:

        整数:

        int value = 100000; 
        String.format("%,d", value); // outputs 100,000
        

        双打:

        double value = 21403.3144d;
        String.format("%,.2f", value); // outputs 21,403.31
        

        String.format is pretty powerful.

        - 根据psuzzi 反馈编辑。

        【讨论】:

        • 优点:没有“新”,不会加载垃圾收集器(与 DecimalFormat 不同)。
        • 看看String.format。它以return new Formatter(l) ... 等开头。所以垃圾收集器的论点并不像看起来那么强大。
        • 这是我最喜欢的答案,问题要求使用 Integer,所以这里是代码: int value = 100000; String.format("%,d", value);
        • 我喜欢这个。
        【解决方案6】:

        使用带逗号的%d 格式说明符:%,d

        这是迄今为止最简单的方法。

        【讨论】:

          【解决方案7】:

          这个解决方案对我有用:

          NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));
          

          【讨论】:

            【解决方案8】:

            您要求最快,但也许您的意思是“最佳”或“正确”或“典型”?

            您还要求用逗号表示千位,但也许您的意思是“根据您的用户的当地习惯以正常人类可读的形式”?

            你这样做:

                int i = 35634646;
                String s = NumberFormat.getIntegerInstance().format(i);
            

            美国人将获得“35,634,646”

            德国人将获得“35.634.646”

            瑞士德国人将获得“35'634'646”

            【讨论】:

            • 在哪里可以获得每个语言环境的数字模式?我试图阅读代码,但无法在任何地方找到它
            【解决方案9】:

            如果必须在 JSP 中执行相同操作,请使用:

            <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
            <c:out value="${formattedVariable}"></c:out>
            

            当然对于多个值使用:

            <c:forEach items="${yourlist}" var="yourlist">
            
                <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
                <c:out value="${formattedVariable}"></c:out>
            </c:forEach>
            

            【讨论】:

              【解决方案10】:

              你不能用一个

              System.out.printf("%n%,d",int name);
              

              printf 中的逗号应将逗号添加到%d 中间。

              对此并不积极,但对我有用。

              【讨论】:

              • 这不是为我编译的
              • “对此不乐观。”毫无意义。
              【解决方案11】:

              首先你需要包含 JSTL 标签:-

              <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
              <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
              

              在页面的开头

              【讨论】:

                【解决方案12】:

                其他答案是正确的,但是在使用 "%,d" 之前请仔细检查您的语言环境:

                Locale.setDefault(Locale.US);
                int bigNumber = 35634646;
                String formattedNumber = String.format("%,d", bigNumber);
                System.out.println(formattedNumber);
                
                Locale.setDefault(new Locale("pl", "PL"));
                formattedNumber = String.format("%,d", bigNumber);
                System.out.println(formattedNumber);
                

                结果:

                35,634,646
                35 634 646
                

                【讨论】:

                  【解决方案13】:
                  System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
                  
                  Output: 35,634,646
                  

                  【讨论】:

                  • 我必须添加import java.text.NumberFormat;
                  • 这会强制使用美国风格的分组,它总是使用,,但是也有一些地区使用. 来代替分组。总之,硬编码语言环境被认为是一种不好的做法。
                  • @DreaminginCode 做好Locale.getCurrent()是解决方案
                  • @RogerRV 没有 Locale.getCurrent() (至少在 android 上)
                  • 是的,这对于 96% 不住在美国的人来说并不是最好的答案
                  【解决方案14】:
                  int bigNumber = 1234567;
                  String formattedNumber = String.format("%,d", bigNumber);
                  

                  【讨论】:

                  猜你喜欢
                  • 2017-05-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-06-12
                  • 2014-01-08
                  相关资源
                  最近更新 更多