1

全部在标题中..,我正在寻找一种以这种方式格式化所有 Double 的安全方法,还有一些其他示例:

1000 ==> 1.000

1500 ==> 1.500

22000 ==> 22.000

1555005 ==> 1 555.005

我查看了此链接 但没有帮助...

有安全的方法吗?提前 THX

4

3 回答 3

3

您想打印输入数字除以一千,使用小数点和空格作为千​​位分隔符。安全的方法是首先转换为,按 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 设置决定数字格式。

于 2012-11-17T18:58:36.973 回答
2

这是取自这里

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
于 2012-11-17T19:00:42.273 回答
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
于 2012-11-17T19:01:30.950 回答