Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA使用十进制格式设置分数部分的格式_Java_Android_Decimal_String Formatting_Decimalformat - Fatal编程技术网

JAVA使用十进制格式设置分数部分的格式

JAVA使用十进制格式设置分数部分的格式,java,android,decimal,string-formatting,decimalformat,Java,Android,Decimal,String Formatting,Decimalformat,关于Java中DecimalFormat的一个小问题 我需要显示号码178500.59999,比如(178 500599 99) 我尝试使用新的DecimalFormat(格式=#####,##0.00) 结果是178500,59 如何使用DecimalFormat显示所有小数部分(该部分可以有任何长度)+小数部分的格式为178 500599 99您可以尝试以下方式: DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols(L

关于Java中DecimalFormat的一个小问题

我需要显示号码178500.59999,比如(178 500599 99)

我尝试使用新的DecimalFormat(格式=#####,##0.00) 结果是178500,59


如何使用DecimalFormat显示所有小数部分(该部分可以有任何长度)+小数部分的格式为178 500599 99

您可以尝试以下方式:

DecimalFormatSymbols formatSymbols = new 
DecimalFormatSymbols(Locale.getDefault());
formatSymbols.setDecimalSeparator(',');
formatSymbols.setGroupingSeparator(' ');
String pattern = "####,####.#####";
DecimalFormat decimalFormat = new DecimalFormat(pattern, formatSymbols);
decimalFormat.setGroupingSize(3);
String number = decimalFormat.format(178500.59999);
System.out.println(number);

尽管这有点不成熟,但您可以通过以下方式扩展decimal format类:

    DecimalFormatSymbols formatSymbols = new
            DecimalFormatSymbols(Locale.getDefault());
    formatSymbols.setDecimalSeparator(',');
    formatSymbols.setGroupingSeparator(' ');
    final String pattern = "####,####.#####";
    DecimalFormat decimalFormat = new DecimalFormat(pattern, formatSymbols) {
        @Override
        public StringBuffer format(double number, StringBuffer res, FieldPosition fieldPosition) {
            StringBuffer noSpaceOnDecimalPart = super.format(number, res, fieldPosition);

            String result = noSpaceOnDecimalPart.toString();

            if (noSpaceOnDecimalPart != null) {
                int indexOf = noSpaceOnDecimalPart.indexOf(String.valueOf(getDecimalFormatSymbols().getDecimalSeparator()));
                if (indexOf >= 0) {
                    String integerPart = noSpaceOnDecimalPart.substring(0, indexOf);
                    String decimalPart = noSpaceOnDecimalPart.substring(indexOf + 1);

                    StringBuilder formattedDecimal = new StringBuilder("");

                    int i = 0;
                    while (i < decimalPart.length()) {
                        if (i != 0 && i % 3 == 0) {
                            formattedDecimal.append(getDecimalFormatSymbols().getGroupingSeparator());
                        }
                        formattedDecimal.append(decimalPart.charAt(i));
                        i++;
                    }

                    result = integerPart + getDecimalFormatSymbols().getDecimalSeparator() + formattedDecimal;
                }
            }

            return new StringBuffer(result);
        }
    };
    decimalFormat.setGroupingSize(3);
    String number = decimalFormat.format(178500.59999);
    System.out.println(number); // prints 178 500,599 99
DecimalFormatSymbols formatSymbols=新
十进制符号(Locale.getDefault());
formatSymbols.setDecimalSeparator(',');
formatSymbols.setGroupingSeparator(“”);
最后一个字符串模式=“######,#####.###”;
DecimalFormat DecimalFormat=新的DecimalFormat(模式、格式符号){
@凌驾
公共StringBuffer格式(双倍数字、StringBuffer res、FieldPosition){
StringBuffer noSpaceOnDecimalPart=super.format(数字、分辨率、字段位置);
字符串结果=noSpaceOnDecimalPart.toString();
if(noSpaceOnDecimalPart!=null){
int indexOf=noSpaceOnDecimalPart.indexOf(String.valueOf(getDecimalFormatSymbols().getDecimalSeparator());
如果(indexOf>=0){
字符串integerPart=noSpaceOnDecimalPart.substring(0,indexOf);
字符串decimalPart=noSpaceOnDecimalPart.substring(indexOf+1);
StringBuilder formattedDecimal=新StringBuilder(“”);
int i=0;
而(i

这只是一个演示,根据您的用例,您可以优化代码并添加对更多配置的支持(更好地遵守DecimalFormat的约定),但这至少是一个起点。我没有找到任何方法用更传统的代码在小数部分添加空格。

可能重复的代码看起来不像重复的,因为他需要在数字的小数部分使用1000个分隔符。我所有这样做的尝试实际上都失败了,出现了一个模式异常。。。除此之外,像
#0.00#######
这样的模式似乎一直工作到小数部分没有分隔符。是的。我需要小数部分的空格。对你的帮助很重要