我想像 String.valueOf(double) 一样格式化 Java double ,也就是说,不损失精度。但我需要使用依赖于语言环境的千位分隔符,并且更喜欢格式化程序字符串,如 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"
关于解析 String.valueOf(d) 的结果以计算小数位数,有什么比以下 hack 更好的建议?
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);
最佳答案
关于用于精确 double 的 Java 格式字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8803480/