我想像String.valueOf(double)那样格式化Java双打,也就是说,不会损失精度。但我需要使用依赖于区域设置的千位分隔符,并且更喜欢格式化程序String,如String.format。我不需要垂直对齐几个数字。示例(在Locale.US中):
1.0 -> "1.0"
1.1 -> "1.1"
1.11 -> "1.11"
1000 * Math.PI -> "3,141.592653589793"
1e9 -> "1,000,000,000.0"
1.234567890123e9 -> "1,234,567,890.123"
比下面的hack更好的建议,包括解析String.valueOf(d)的结果来计算小数位数?
double d = ...
String s = String.valueOf(d);
int exponent = s.indexOf('E');
int decimals;
if (0 <= exponent) {
decimals = Math.max(1, exponent - s.indexOf('.') - Integer.parseInt(s.substring(exponent + 1)) - 1);
}
else {
decimals = s.length() - s.indexOf('.') - 1;
}
String format = "%,." + decimals + "f";
System.out.printf("Value: " + format + "\n", d);
答案 0 :(得分:2)
答案 1 :(得分:1)
例如:
double d = 1.234567890123e9;
//Initiating a format depending on current locale:
final NumberFormat format = NumberFormat.getInstance();
format.setGroupingUsed( true );
System.out.println( format.format( d ) );
打印:
1,234,567,890.123
但是在精确度方面,您可能应考虑使用其他数据类型,如BigDecimal。