如何在不修改INT变量的情况下打印保留三位小数的DOUBLE值?
解决int类型变量打印小数点后三位的问题
嘿,我明白你的困扰了——你需要把一个只能是int类型的变量以小数点后三位的格式打印出来,尝试了强制转换和printf但没成功对吧?咱们先看看你代码里的问题所在,再给出修复方案。
为什么你的当前写法没生效?
你现在的打印语句是这样的:
System.out.printf((double) sol[i][j] + " ");
这里的问题是,你先把sol[i][j]强制转换成double,然后和空格字符串拼接成了一个普通字符串,再传给printf。这时候printf只是单纯输出这个字符串,根本没用到它的格式化功能!比如如果sol[i][j]是2,拼接后得到的是"2.0 ",printf只会直接输出这个内容,不会帮你补全到三位小数。
正确的解决方法
要让printf帮你格式化到小数点后三位,你需要使用格式化说明符,把转换后的数值作为参数单独传给printf,而不是拼接字符串。
情况1:你需要打印sol[i][j]这个int值的三位小数形式
比如sol[i][j]是2,你想输出2.000,那修改打印语句为:
System.out.printf("%.3f ", (double) sol[i][j]); output.printf("%.3f ", (double) sol[i][j]);
这里的%.3f就是格式化说明符:
%表示格式化标记的开始.3表示保留三位小数f表示以浮点数格式输出
情况2:你实际想打印adj[i][j]/det的精确浮点结果(但sol必须是int用于其他计算)
注意哦,因为adj[i][j]和det都是int的话,adj[i][j]/det会先执行整数除法(直接截断小数部分),然后把结果存到int类型的sol[i][j]里。比如5/2会得到2而不是2.5,这时候再转double也只能得到2.0。
如果你想打印的是实际的除法结果(比如2.500),那你需要在打印的时候直接计算浮点除法,而不是用sol[i][j]的值:
// 直接计算浮点除法并格式化打印,不依赖sol里的截断值 double result = (double) adj[i][j] / det; System.out.printf("%.3f ", result); output.printf("%.3f ", result); // sol[i][j]还是保留整数除法的结果,用于后续计算 sol[i][j] = adj[i][j] / det;
修改后的完整代码片段
把你的循环里的打印部分替换成正确的写法后,代码大概是这样:
for (int i = 0; i < 2; i++) // Printing Inverse { System.out.print("["); output.print("["); for (int j = 0; j < 2; j++) { sol[i][j] = adj[i][j] / det; // 这里用格式化输出三位小数 System.out.printf("%.3f ", (double) sol[i][j]); output.printf("%.3f ", (double) sol[i][j]); } // 补充闭合括号,避免格式混乱 System.out.print("]\n"); output.print("]\n"); }
这样就能实现你想要的小数点后三位打印效果啦!
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

