Java 如何在字符串格式中显示double而不截断为float?
我正在学习普林斯顿算法课程,第一个编程任务要求以这种方式输出结果:Java 如何在字符串格式中显示double而不截断为float?,java,formatting,string-formatting,Java,Formatting,String Formatting,我正在学习普林斯顿算法课程,第一个编程任务要求以这种方式输出结果: mean = 0.5929934999999997 stddev = 0.00876990421552567 95% confidence interval = [0.5912745987737567, 0.5947124012262428] 我考虑过字符串格式,因为没有一个头脑正常的人会计算缩进的空格数: String confidence =
mean = 0.5929934999999997
stddev = 0.00876990421552567
95% confidence interval = [0.5912745987737567, 0.5947124012262428]
我考虑过字符串格式,因为没有一个头脑正常的人会计算缩进的空格数:
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width)).concat("s = ");
System.out.printf(f.concat("%f\n"), "mean", stats.mean());
System.out.printf(f.concat("%f\n"), "stddev", stats.stddev());
System.out.printf(f.concat("[%f, %f]"), confidence, stats.confidenceLo(), stats.confidenceHi());
但令我遗憾的是,该计划截短了双倍浮动:
mean = 0.591316
stddev = 0.009776
95% confidence interval = [0.589400, 0.593232]
那么,有没有办法将双倍数字整体格式化呢?在这种情况下使用十进制格式,比如:
double mean = 0.592993499999999;
NumberFormat formatter = new DecimalFormat("#0.000000000000000");
System.out.println(formatter.format(mean));
使用16位小数格式%.16f
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width)).concat("s = ");
System.out.printf(f.concat("%.16f\n"), "mean", stats.mean());
System.out.printf(f.concat("%.16f\n"), "stddev", stats.stddev());
System.out.printf(f.concat("[%.16f, %.16f]"), confidence, stats.confidenceLo(), stats.confidenceHi());
我使用了String.valueOfaDoubleNumber方法,并将printf语句中的%f更改为%s。这对我有用
public static void main(String[] args)
{
double mean = 0.5929934999999997;
double stddev = 0.00876990421552567;
double confidenceLo = 0.12345666612123;
double confidenceHi = 0.123456784435369;
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width))
.concat("s = ");
// changed the %f to %s and used String.valueOf method to convert first
System.out.printf(f.concat("%s\n"), "mean", String.valueOf(mean));
System.out.printf(f.concat("%s\n"), "stddev", String.valueOf(stddev));
System.out.printf(f.concat("[%s, %s]"), confidence,
(String.valueOf(confidenceLo)), String.valueOf(confidenceHi));
}
输出:
平均值=0.5929934999997
STDEV=0.008769904215567
95%置信区间=[0.1234566612123,0.12345678445369]
@康斯坦丁诺波尔斯卡娅:这个答案是有效的。但是您必须记住在printf中将%f更改为%s,因为格式化程序返回一个字符串。