Java String.format()

2g32fytz  于 2023-04-19  发布在  Java
关注(0)|答案(3)|浏览(139)

我有一个字符串,我想用自定义的方式格式化它。这是我的字符串:

String amount = "355128000";

我希望它的格式是这样的:

String formattedAMount = "3 551 280,00"

第一个数字后有一个空格,一组3个数字,最后两个数字前有一个逗号

bgtovc5b

bgtovc5b1#

您可以创建NumberFormatter的示例并指定选项:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;

public class NumberFormatExample {

    private static final DecimalFormat numberFormatter;

    static {
        numberFormatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);

        // Configure/override
        DecimalFormatSymbols symbols = numberFormatter.getDecimalFormatSymbols();
        symbols.setGroupingSeparator('\u00a0'); // non-breaking space
        symbols.setDecimalSeparator(',');
        numberFormatter.setDecimalFormatSymbols(symbols);
        numberFormatter.setMinimumFractionDigits(2);
    }

    public static String formatNumber(String rawNumber) {
        return numberFormatter.format(Long.parseLong(rawNumber) / 100d);
    }

    public static void main(String[] args) {
        String amount = "355128000";
        System.out.println(formatNumber(amount)); // 3 551 280,00
    }
}

编辑

看起来您可以使用French格式化程序,并仅指定最小分数位。

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class NumberFormatExample {

    private static final DecimalFormat numberFormatter;

    static {
        numberFormatter = (DecimalFormat) NumberFormat.getInstance(Locale.FRENCH);

        // Configure
        numberFormatter.setMinimumFractionDigits(2);
    }

    public static String formatNumber(String rawNumber) {
        return numberFormatter.format(Long.parseLong(rawNumber) / 100d);
    }

    public static void main(String[] args) {
        String amount = "355128000";
        System.out.println(formatNumber(amount)); // 3 551 280,00
    }
}
mzaanser

mzaanser2#

如果你先把它转换成double,你可以用String.format()化它:

String amount = "355128000";
double amountDouble = Double.parseDouble(amount);

String formattedAmount = String.format("%,.2f", amountDouble);
// 355,128,000.00

如果你想让它看起来和你展示的完全一样,你可以通过以下方式实现:

String formattedAmount = String.format("%,.2f", amountDouble).replace(",", " ").replace(".", ",");

但是String.format()可能不是最好的方法,使用DecimalFormat代替。

ukqbszuj

ukqbszuj3#

我会放弃NumberFormat,只使用与您所需格式匹配的France locale按如下方式执行。

String amount = "355128000";

UnaryOperator<String> format = str -> {
    long v = Long.parseLong(str);
    return String.format(Locale.FRANCE, "%,.2f", v / 100.);
};

System.out.println(format.apply(amount));

印刷品

3 551 280,00

相关问题