如何格式化 java 中的整数?
How can I format int numbers in java?
我正在尝试将此格式应用于给定的整数 #´###,###
我尝试使用 DecimalFormat class
但是当我需要两个 [=13] 时它只允许有一个分组分隔符=] 代表百万,逗号代表千。
所以最后我可以用这种方式格式化 1,000
或数百万这样的值 1´000,000
也许可以尝试使用这个,在 space 或逗号之前用您想要的单位替换“#”。
String num = "1000500000.574";
String newnew = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
我总是喜欢使用 String.format,但我不确定是否有一个语言环境可以像那样格式化数字。不过,这里有一些代码可以完成这项工作。
// Not sure if you wanted to start with a number or a string. Adjust accordingly
String stringValue = "1000000";
float floatValue = Float.valueOf(stringValue);
// Format the string to a known format
String formattedValue = String.format(Locale.US, "%,.2f", floatValue);
// Split the string on the separator
String[] parts = formattedValue.split(",");
// Put the parts back together with the special separators
String specialFormattedString = "";
int partsRemaining = parts.length;
for(int i=0;i<parts.length;i++)
{
specialFormattedString += parts[i];
partsRemaining--;
if(partsRemaining > 1)
specialFormattedString += "`";
else if(partsRemaining == 1)
specialFormattedString += ",";
}
试试这个,这些 Locale
格式是您需要的格式。
List<Locale> locales = Arrays.asList(new Locale("it", "CH"), new Locale("fr", "CH"), new Locale("de", "CH"));
for (Locale locale : locales) {
DecimalFormat df = (DecimalFormat) NumberFormat.getCurrencyInstance(locale);
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
dfs.setCurrencySymbol("");
df.setDecimalFormatSymbols(dfs);
System.out.println(String.format("%5s %15s %15s", locale, format(df.format(1000)), format(df.format(1_000_000))));
}
实用方法
private static String format(String str) {
int index = str.lastIndexOf('\'');
if (index > 0) {
return new StringBuilder(str).replace(index, index + 1, ",").toString();
}
return str;
}
输出
it_CH 1,000.00 1'000,000.00
fr_CH 1,000.00 1'000,000.00
de_CH 1,000.00 1'000,000.00
设置df.setMaximumFractionDigits(0);
删除分数
输出
it_CH 1,000 1'000,000
fr_CH 1,000 1'000,000
de_CH 1,000 1'000,000
我发现 link @Roshan 在评论中提供的有用,此解决方案使用正则表达式和 replaceFirst 方法
public static String audienceFormat(int number) {
String value = String.valueOf(number);
if (value.length() > 6) {
value = value.replaceFirst("(\d{1,3})(\d{3})(\d{3})", "\u00B4,");
} else if (value.length() >=5 && value.length() <= 6) {
value = value.replaceFirst("(\d{2,3})(\d{3})", ",");
} else {
value = value.replaceFirst("(\d{1})(\d+)", ",");
}
return value;
}
我不知道这个解决方案是否会影响性能,而且我对正则表达式很不满意,所以这段代码可能会被缩短。
我正在尝试将此格式应用于给定的整数 #´###,###
我尝试使用 DecimalFormat class
但是当我需要两个 [=13] 时它只允许有一个分组分隔符=] 代表百万,逗号代表千。
所以最后我可以用这种方式格式化 1,000
或数百万这样的值 1´000,000
也许可以尝试使用这个,在 space 或逗号之前用您想要的单位替换“#”。
String num = "1000500000.574";
String newnew = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
我总是喜欢使用 String.format,但我不确定是否有一个语言环境可以像那样格式化数字。不过,这里有一些代码可以完成这项工作。
// Not sure if you wanted to start with a number or a string. Adjust accordingly
String stringValue = "1000000";
float floatValue = Float.valueOf(stringValue);
// Format the string to a known format
String formattedValue = String.format(Locale.US, "%,.2f", floatValue);
// Split the string on the separator
String[] parts = formattedValue.split(",");
// Put the parts back together with the special separators
String specialFormattedString = "";
int partsRemaining = parts.length;
for(int i=0;i<parts.length;i++)
{
specialFormattedString += parts[i];
partsRemaining--;
if(partsRemaining > 1)
specialFormattedString += "`";
else if(partsRemaining == 1)
specialFormattedString += ",";
}
试试这个,这些 Locale
格式是您需要的格式。
List<Locale> locales = Arrays.asList(new Locale("it", "CH"), new Locale("fr", "CH"), new Locale("de", "CH"));
for (Locale locale : locales) {
DecimalFormat df = (DecimalFormat) NumberFormat.getCurrencyInstance(locale);
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
dfs.setCurrencySymbol("");
df.setDecimalFormatSymbols(dfs);
System.out.println(String.format("%5s %15s %15s", locale, format(df.format(1000)), format(df.format(1_000_000))));
}
实用方法
private static String format(String str) {
int index = str.lastIndexOf('\'');
if (index > 0) {
return new StringBuilder(str).replace(index, index + 1, ",").toString();
}
return str;
}
输出
it_CH 1,000.00 1'000,000.00
fr_CH 1,000.00 1'000,000.00
de_CH 1,000.00 1'000,000.00
设置df.setMaximumFractionDigits(0);
删除分数
输出
it_CH 1,000 1'000,000
fr_CH 1,000 1'000,000
de_CH 1,000 1'000,000
我发现 link @Roshan 在评论中提供的有用,此解决方案使用正则表达式和 replaceFirst 方法
public static String audienceFormat(int number) {
String value = String.valueOf(number);
if (value.length() > 6) {
value = value.replaceFirst("(\d{1,3})(\d{3})(\d{3})", "\u00B4,");
} else if (value.length() >=5 && value.length() <= 6) {
value = value.replaceFirst("(\d{2,3})(\d{3})", ",");
} else {
value = value.replaceFirst("(\d{1})(\d+)", ",");
}
return value;
}
我不知道这个解决方案是否会影响性能,而且我对正则表达式很不满意,所以这段代码可能会被缩短。