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);