这个问题已经在这里有一个答案:
- 我怎样才能格式的字符串数量有逗号和圆的? 10个回答
- 数在java中的格式,而不是使用百万格式万卢比格式 3个回答
我想获得以下格式号码:
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
。 为什么?
你可以实现这个您的要求
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);
}
但是,尽管模式的##,##,###,###我收到输出2,564,484.125而我想我应该把它作为25,64,484.125。 为什么?
您可以提供多个分组字符,但只有一个被使用。 从的Javadoc :
如果提供了图案与多个分组字符, 最后一个和整数的端部之间的间隔为所使用的一个 。
因此, “#,##,###,####” == “######,####” == “##,####,####”
看来,格式化万卢比格式是不可能的标准Java机制,见数在Java中格式化使用万卢比格式而不是百万格式的解决方案。
这可能是因为数字格式:百万,十亿,万亿和......所以,我已经为你需要一个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;
}