【问题标题】:Formatting numbers in Java / Indian numbering system [duplicate]在 Java / 印度编号系统中格式化数字 [重复]
【发布时间】:2014-09-24 12:58:49
【问题描述】:

我想获取以下格式的号码:

1000   =    1,000
10000  =   10,000
100000 = 1,00,000

我试过了:

import java.text.DecimalFormat;

public class StringProcessingDemo {

public static void main(String[] args) {
     String pattern = "##,##,###.###";
        DecimalFormat myFormatter = new DecimalFormat(pattern);
        String output = myFormatter.format(2564484.125);            
        System.out.println(output);
    }
}

但是尽管有##,##,###.### 模式,我得到的输出是2,564,484.125,而我认为我应该得到它作为25,64,484.125。为什么?

【问题讨论】:

  • 25,64,484.125是什么格式?
  • 为什么你认为输出是这样的?
  • 但我不明白为什么这种模式不能产生我想要的结果

标签: java string-formatting decimalformat


【解决方案1】:

你可以用这个实现你的要求

public static String format(double value) {
    if(value < 1000) {
        return format("###", value);
    } else {
        double hundreds = value % 1000;
        int other = (int) (value / 1000);
        return format(",##", other) + ',' + format("000", hundreds);
    }
}

private static String format(String pattern, Object value) {
    return new DecimalFormat(pattern).format(value);
}

【讨论】:

  • 是的,但它会修剪小数部分
  • format(2564484.125) 打印 25,64,484
  • nyways 得到了答案here
【解决方案2】:

但是尽管模式 ##,##,###.### 我得到的输出是 2,564,484.125,而我认为我应该得到它作为 25,64,484.125。为什么?

您可以提供多个分组字符,但只能使用一个。来自Javadoc

如果您提供具有多个分组字符的模式,则最后一个和整数末尾之间的间隔就是使用的那个

所以 "#,##,###,####" == "######,####" == "##,####,####"

使用标准 Java 机制似乎无法格式化 Lakh 格式,请参阅Number formatting in java to use Lakh format instead of million format 以获得解决方案。

【讨论】:

  • 哦,令人惊讶的是,但又不直观,那么我如何才能实现我想要的呢?
【解决方案3】:

这可能是因为数字格式:百万,十亿和万亿......所以,我为您的需要创建了一个java函数:

String lakhFormattedComma(Double d) {
  String[] str = d.toString().split("\\.");
  int len = str[1].length();
  if (str[1].substring(len - 3, len - 1).equals("E-")) {
    return String.format("%." + (len - 3 + Integer.valueOf(str[1].substring(len - 1))) + "f", d);
  } else if (str[1].substring(len - 2, len - 1).equals("E")) {
    str = String.format("%." + (len - 2 - Integer.valueOf(str[1].substring(len - 1))) + "f", d).split("\\.");
  }
  String out = "." + str[1];
  len = str[0].length();
  if (len < 3) {
    return str[0] + out;
  }
  out = str[0].substring(len - 3) + out;
  for (int i = len - 5; i >= 0; i = i - 2) {
    out = str[0].substring(i, i + 2) + "," + out;
    if (i == 1) {
      out = str[0].substring(0, 1) + "," + out;
    }
  }
  return out;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多