求助:C语言printf用%.3f格式化数值的输出结果及代码错误修正
问题分析与修正代码
你的代码存在几个核心问题,直接导致了错误结果:
- 用
int类型存储浮点数,会直接截断小数部分,丢失原始数值精度 scanf用了%i格式符(用于读取整数),读取浮点数应该用%f(对应float)或%lf(对应double)printf里传入的是&num1(变量的内存地址),而非变量本身的数值- 任务要求直接打印给定的三个数值,不需要做交互式输入,你的代码逻辑完全偏离了要求
以下是符合任务要求的正确代码:
#include <stdio.h> int main() { // 用double类型存储高精度浮点数,比float更适配任务中的数值精度需求 double num1 = 456.87654321; double num2 = 0.17023; double num3 = 443.14159; // 使用%.3f格式符打印,自动保留三位小数并四舍五入 printf("%.3f\n", num1); printf("%.3f\n", num2); printf("%.3f\n", num3); return 0; }
运行后会输出:
456.877 0.170 443.142
补充说明:
double类型能更好地保留浮点数精度,避免不必要的计算误差%.3f会对第四位小数进行四舍五入,所以456.87654321最终显示为456.877,443.14159显示为443.142,0.17023保留三位小数为0.170
内容的提问来源于stack exchange,提问作者DirtyFan2
相关产品推荐
相关产品推荐

