全部在标题中..,我正在寻找一种以这种方式格式化所有 Double 的安全方法,还有一些其他示例:
1000 ==> 1.000
1500 ==> 1.500
22000 ==> 22.000
1555005 ==> 1 555.005
我查看了此链接 但没有帮助...
有安全的方法吗?提前 THX
全部在标题中..,我正在寻找一种以这种方式格式化所有 Double 的安全方法,还有一些其他示例:
1000 ==> 1.000
1500 ==> 1.500
22000 ==> 22.000
1555005 ==> 1 555.005
我查看了此链接 但没有帮助...
有安全的方法吗?提前 THX
您想打印输入数字除以一千,使用小数点和空格作为千位分隔符。安全的方法是首先转换为,按 10 -3BigDecimal
缩放,然后使用.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 设置决定数字格式。
这是取自这里
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
始终使用 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