Java 如何打印不带逗号的双精度打印

Java 如何打印不带逗号的双精度打印,java,formatting,double,Java,Formatting,Double,使用toString()时,Double会添加逗号(5143打印为5143)。 如何禁用逗号 myDouble.toString().replaceAll(",", ""); 给我5143.0…你能把你得到的代码放进去吗?据我所知,你不能禁用toString()方法返回的内容 我的解决办法如下: someDouble.toString().replaceAll(",", ""); 虽然不是最优雅的解决方案,但它很有效。可能您必须更改您的区域设置。默认情况下,它是从系统区域设置获取的,但您可以

使用
toString()
时,Double会添加逗号(5143打印为5143)。 如何禁用逗号

myDouble.toString().replaceAll(",", "");

给我
5143.0…
你能把你得到的代码放进去吗?据我所知,你不能禁用
toString()
方法返回的内容

我的解决办法如下:

someDouble.toString().replaceAll(",", "");

虽然不是最优雅的解决方案,但它很有效。

可能您必须更改您的区域设置。默认情况下,它是从系统区域设置获取的,但您可以覆盖它。阅读类上的javadoc,然后开始。可以通过命令行指定区域设置:

java -Duser.language=en -Duser.region=US MyApplication

正如Rorick正确指出的,您的问题属于区域设置。然而,你们应该深入课堂,以防改变语言环境意味着把所有事情搞砸

看看班上,要处理千位分隔符。因为您的案例似乎是关于千位分隔符的。

三种方式:

  • 使用
    DecimalFormat

    DecimalFormat df = new DecimalFormat();
    DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
    dfs.setGroupingSeparator(Character.MAX_VALUE);
    df.setDecimalFormatSymbols(dfs);
    System.out.println(df.format(doubleVar));
    
  • (正如其他人所建议的)只需替换得到的字符串中的逗号即可

  • 设置虚拟机加载时的区域设置

  • Java非常支持使用类在不同语言环境中格式化文本中的数字:

    使用当前区域设置:

    NumberFormat.getNumberInstance().format(5000000);
    
    将为您(使用瑞典语言环境)获取字符串:5 000 000

    …或使用特定的区域设置(例如法语,这也会导致5000):


    我使用此方法将double格式化为具有固定区域设置、无分组和 小数位数的最小值和最大值

    public String formatNumber(double number){
        NumberFormat nf = NumberFormat.getInstance(new Locale("en", "EN"));
        nf.setMaximumFractionDigits(3);  
        nf.setMinimumFractionDigits(1);
        nf.setGroupingUsed(false);
        String str = nf.format(number);
        return str;       
     }
    

    这将删除所有分组(以逗号为例)


    NumberFormat format=NumberFormat.getInstance()


    format.setGroupingUsed(false)

    我没有使用以下代码获得分隔符:String str=Double.toString(5143)@tur1ng:您的区域设置与Erik的设置不同@波佐:它不是十进制分隔符,它是一个千位分隔符,用于在某些地区对数字进行分组。这是一种很奇怪的做法,IMHO-为了进一步搞糟事情,在某些地区,相同的符号(,)被用作十进制分隔符。它不一定是十进制分隔符。例如,在俄语语言环境中,是一个数字分组符号,而十进制分隔符是
    。因此,在美国地区看起来是
    5143.5
    ,在俄罗斯地区看起来是
    5143.5
    。事实上,我正在写同样的东西。无论如何,我写了一篇补充文章。:)这是一个破解,不是一个解决方案,imho。+1因为我写了同样的:)。我不认为它“不优雅”(甚至比另一篇文章中的区域设置处理更好),因为它没有副作用,而且完全符合预期。@Rorick:它不仅是一个解决方案,也是最好的解决方案。如果你的程序是供你个人家庭使用的话。如果你不需要逗号,它就是一个无处不在的解决方案。如果你不想要任何分隔符,你必须增强它(但类似!!)。如果你想通过操纵语言环境来解决这个问题,你会有副作用,你无法确定其他地方发生了什么,或者你需要在罗马尼亚(以及其他任何地方)用你的美国语言环境运行这个程序。因此,如果问题是设置双精度的格式(而不是日期、货币或……),那么通过设置双精度的格式来解决它。>如果你的程序是供你个人在家使用的话。<反之亦然。请在那里查看Bozho的帖子。他的观点很有道理,我不得不承认我根本不明白他的观点。。。看起来他说的是十进制分隔符,而不是数字组分隔符(这个问题就是关于这个)。@kai1968:他提供的例子是整数值,并且提到,
    Double
    添加逗号。所以,我倾向于同意。我认为他需要回来澄清这里的混乱。在十进制分隔符是“,”而myDouble是1.5之类的分数的情况下,如何防止出现错误?在许多欧洲地区,美国人写的1.5将被格式化为“1,5”,这段代码将转换为“15”。这是不完整的,似乎是多余的。NumberFormat从何处导入?
    NumberFormat.getNumberInstance(Locale.FRANCE).format(5000000);
    
    public String formatNumber(double number){
        NumberFormat nf = NumberFormat.getInstance(new Locale("en", "EN"));
        nf.setMaximumFractionDigits(3);  
        nf.setMinimumFractionDigits(1);
        nf.setGroupingUsed(false);
        String str = nf.format(number);
        return str;       
     }
    
    DecimalFormat df = new DecimalFormat();
    df.setGroupingUsed(false);