在Java中将double格式化为两位小数时,会产生逗号而不是点号。

4

我已经阅读了很多讨论串,似乎最好的解决方案是保留双精度数字中的2位小数:

DecimalFormat df = new DecimalFormat("#.00");
double d = 1.234567;
System.out.println(df.format(d));

但是当我使用它时,它打印出:

1,23

我想保留小数点,因为我需要这种格式(#.##)来使用(我将把它作为字符串使用)。如何保留这个小数点?


当我使用了你的代码后,我的打印出了点号... - james
2
看一下这个问题: https://dev59.com/Zm445IYBdhLWcg3wE2Ne - copakawusau
2
@JamesClark 这是因为您和 OP 处于不同的区域设置 :-) - Sergey Kalinichenko
3个回答

19
如果你想使用点号而不是逗号,你应该指定一个使用点号作为十进制分隔符的Locale,例如:
DecimalFormat df = new DecimalFormat("#.00",
                                    DecimalFormatSymbols.getInstance(Locale.US));

基本上,格式模式中的“.”并不意味着“点”,而是表示“小数分隔符”。


非常棒的回答。简单而快速。感谢您的帮助。 - fhbeltrami
救了我的一天,问题出现在非美国本地环境运行我的应用程序时。 - Arslan Sohail

2

试一下这个。在这种情况下,您不需要定义模式。

DecimalFormat format = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRENCH);
format.setMaximumFractionDigits(2);
System.out.println(format.format(1.234567));

请看这个程序。找出您的语言环境并使用特定于该语言环境的NumberFormat

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

public class LocaleNumberFormatDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {

        double no = 123456.7890;

        System.out.println(Locale.getAvailableLocales().length);
        for (Locale locale : Locale.getAvailableLocales()) {
            NumberFormat numberFormat = DecimalFormat.getNumberInstance(locale);

            System.out.println("========================================");
            System.out.println(locale.getDisplayCountry() + " - " + locale.toString());
            System.out.println(numberFormat.format(no));

            DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(locale);
            String numberPattern = decimalFormat.toLocalizedPattern();
            System.out.println(numberPattern);
        }
    }

}

输出:

    Malaysia - ms_MY
    123,456.789
    #,##0.###
    ========================================
    Qatar - ar_QA
    123,456.789
    #,##0.###;#,##0.###-
    ========================================
    Iceland - is_IS
    123.456,789
    #.##0,###
    ========================================
    Finland - fi_FI
    123 456,789
    # ##0,###

and so on...


1
无论是小数点(.)还是逗号(,)的显示方式取决于您所在的位置,或者更确切地说是您的环境设置使用的语言环境。一些国家使用逗号而不是点,因此这是预期行为。如果您绝对需要小数点(.),则应该能够在Decimal Format声明中更改您的语言环境。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接