用于精确 double 的 Java 格式字符串?

标签 java string formatting

我想像 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/

相关文章:

java - 字节流中协议(protocol)数据单元的动态识别和处理

java - 我可以用java编写Facebook墙阅读吗?

java - Hibernate 多对多 XML 映射中的重复行

java - 如何在 java 中测试一个字符串是否等于数组中的任何其他字符串

c++ - 扫描字符串每个字符的ASCII值

Java 8 日期时间格式日期+偏移量

java - 如何使用 setOnClickListener 在 View v 中放置什么内容作为预设方法?

java - "+"用于String拼接是否影响效率?

java - 将 4 位军用时间转换为标准 12 小时时间格式

java - 在文件中生成数据库值的字符串格式化问题