如何以安全的方式将Double从1234567格式化为1 234.567

时间:2012-11-17 18:48:59

标签: java formatting

标题中的所有内容......,我正在寻找一种安全的方式来以这种方式格式化所有Double,其他一些例子:

1000 ==> 1.000

1500 ==> 1.500

22000 ==> 22.000

1555005 ==> 1 555.005

我查看this link但没有帮助......

有一种安全的方法吗? THX提前

3 个答案:

答案 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