标题中的所有内容......,我正在寻找一种安全的方式来以这种方式格式化所有Double,其他一些例子:
1000 ==> 1.000
1500 ==> 1.500
22000 ==> 22.000
1555005 ==> 1 555.005
我查看this link但没有帮助......
有一种安全的方法吗? THX提前
答案 0 :(得分:3)
您希望打印输入数字除以千,使用小数点和空格作为千位分隔符。安全的方法是首先转换为BigDecimal
,按10 -3 进行缩放,然后使用DecimalFormat
进行打印。
final DecimalFormat f = new DecimalFormat("#,###.000");
final DecimalFormatSymbols s = new DecimalFormatSymbols();
s.setGroupingSeparator(' ');
s.setDecimalSeparator('.');
f.setDecimalFormatSymbols(s);
final double input = 1_555_005;
final BigDecimal x = new BigDecimal(input).scaleByPowerOfTen(-3);
System.out.println(f.format(x));
打印
1 555.005
请注意,明确设置分组/小数分隔符是不这是执行此操作的正统方法:通常您可以让Locale设置指示数字格式。
答案 1 :(得分:2)
取自here
static public void displayNumber(Locale currentLocale) {
Integer quantity = new Integer(123456);
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String quantityOut;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
quantityOut = numberFormatter.format(quantity);
amountOut = numberFormatter.format(amount);
System.out.println(quantityOut + " " + currentLocale.toString());
System.out.println(amountOut + " " + currentLocale.toString());
}
此示例打印以下内容;它显示了相同数字的格式如何随区域设置而变化:
123 456 fr_FR
345 987,246 fr_FR
123.456 de_DE
345.987,246 de_DE
123,456 en_US
345,987.246 en_US
答案 2 :(得分:0)
始终使用java格式化API。有一个很好的数字格式教程 - http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html。
您可以获取法语和格式的基于语言环境的格式化程序:
NumberFormat nf = NumberFormat.getNumberInstance(loc);
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern(pattern);
String output = df.format(value);
System.out.println(pattern + " " + output + " " + loc.toString());
对于法语,输出将是这样的:
###,###.### 123 456,789 fr_FR