首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何格式化6位或9位数字,如#、##、###

如何格式化6位或9位数字,如#、##、###
EN

Stack Overflow用户
提问于 2016-12-16 00:46:50
回答 2查看 596关注 0票数 0

如何格式化6位或9位数字,如#,##,###表示6,###表示9

代码语言:javascript
复制
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class CheckFormater {

public static void main(String[] args) {
    NumberFormat nf6 = new DecimalFormat("#,##,###");
    System.out.println(nf6.format(123456d));

    NumberFormat nf9 = new DecimalFormat("##,##,##,###");
    System.out.println(nf9.format(123456789d));
}

}

我得到的输出如下

代码语言:javascript
复制
123,456
123,456,789

我的期望如下

代码语言:javascript
复制
1,23,456
12,34,56,789

如何进行服装格式化?

EN

回答 2

Stack Overflow用户

发布于 2016-12-16 01:08:55

您可以使用ICU4J

代码语言:javascript
复制
import com.ibm.icu.text.DecimalFormat;
import com.ibm.icu.text.DecimalFormatSymbols;

public class NewClass {
    public static void main(String[] args)  { 
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setGroupingSeparator(',');
        DecimalFormat nf6  = new DecimalFormat("#,##,###", dfs);
        DecimalFormat nf9  = new DecimalFormat("##,##,##,###", dfs);
        System.out.println(nf6.format(123456d));
        System.out.println(nf9.format(123456789d));
    }   
}

//prints
//1,23,456
//12,34,56,789
票数 1
EN

Stack Overflow用户

发布于 2016-12-16 02:07:19

以下是Java Docs所说的:

分组分隔符通常用于数千人,但在某些国家,它用于分隔10000人。分组大小是分组字符之间的恒定位数,例如3表示100,000,000或4表示1,000,0000。如果提供具有多个分组字符的模式,则使用的是最后一个字符和整数末尾之间的间隔。所以"#,##,###,####“== "######,####”== "##,####,####“。

因此,换句话说,一次只能指定一种分组分隔符格式。千分隔符、万分隔符或百分隔符。即使您尝试在一个格式中指定多个格式,该方法也将仅使用最后一个格式和整数结尾之间的间隔。所以在你的例子中你指定了"#,##,###“,但是这个方法将只考虑最后一个逗号和后面的数字数,在你的例子中是3。这就是为什么输出是一千个分隔符的原因。

我还希望选择适当的语言环境可以解决这个数字格式问题,而不需要指定任何模式。例如,在印度,数字实际上是按照你想要的方式格式化的。第一个分隔符是以千位为基础的,其余的是以百位为基础的。因此,如果我选择印度英语区域设置,它应该会自动满足此要求。但事实并非如此。

代码语言:javascript
复制
NumberFormat nf6 = NumberFormat.getInstance(new Locale("en-IN"));       
System.out.println(nf6.format(54123756.523d));//Still prints 54,123,756.523 and not 5,41,23,756.523

所以不幸的是,除非你在另一个答案中推荐使用第三方库,否则没有现成的方法来实现你的目标。然而,你总是可以使用一个见鬼的东西。它并不整洁,但却达到了目标。也许你可以把这个hack封装在一个实用的方法或其他东西中:

代码语言:javascript
复制
    double number = 54123756.523d;
    int prefix = (int)number / 1000;

    NumberFormat nf1 = new DecimalFormat("#,##");
    String newPrefix = nf1.format(prefix);

    double remainder = number - (prefix * 1000);
    NumberFormat nf2 = new DecimalFormat("#,###.##");
    String newRemainder = nf2.format(remainder);

    String finalNum = newPrefix + "," + newRemainder;
    System.out.println("Formatted number is " + finalNum);

因此,看看您是否可以接受上面建议的代码示例。它并不理想,效率也不高,但至少可以满足您的需求,并且不需要任何第三方库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41169288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档