在Java中将双精度格式设置为两位小数会产生逗号而不是点[重复]

Posted

技术标签:

【中文标题】在Java中将双精度格式设置为两位小数会产生逗号而不是点[重复]【英文标题】:Formatting doubles to two decimal places in Java produces a comma instead of a dot [duplicate] 【发布时间】:2014-06-09 19:39:40 【问题描述】:

我已经阅读了很多线程,这似乎是在我的双数中保留 2 个位置的最佳解决方案:

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

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

1,23

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

【问题讨论】:

当我使用您的代码时,我的会打印出点... 看看这个问题:***.com/questions/5054132/… @JamesClark 那是因为你和 OP 在不同的地区:-) 【参考方案1】:

如果你想要一个点而不是逗号,你应该指定一个Locale,它使用点作为小数分隔符,例如

DecimalFormat df = new DecimalFormat("#.00",
                                    DecimalFormatSymbols.getInstance(Locale.US));

基本上,“。”在格式模式中并不表示“点”,而是表示“小数分隔符”。

【讨论】:

很棒的答案。简单快速。感谢您的帮助 救了我的命,当美国地区以外的其他人运行我的应用程序时,问题就来了。【参考方案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,###

等等……

【讨论】:

【参考方案3】:

小数点是否显示句点 (.) 或逗号 (,) 取决于您所在的位置,或者您的环境设置使用的区域设置。某些国家/地区使用逗号而不是点,因此这是预期行为。如果您绝对需要小数点 (.),您应该能够在 Decimal Format 声明中更改您的语言环境。

【讨论】:

以上是关于在Java中将双精度格式设置为两位小数会产生逗号而不是点[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何格式化数据库中的双精度数据并在 Android 上使用逗号作为小数分隔符设置到 Textview

在java中将双精度值舍入为两位有效数字[重复]

是否可以将两位小数分配给双精度

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)