You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何使输出结果的小数位数与用户输入数值的小数位数一致?

C语言实现输出精度与输入小数位数匹配的方案

核心技术说明

你要实现的功能可以通过动态精度格式化输出实现,这是C标准库printf系列函数原生支持的特性:你可以用*作为格式串中精度位的占位符,运行时传入实际的精度值参数即可控制输出的小数位数。

你之前直接用scanf读取double类型变量的方式无法实现需求,因为浮点数在内存中仅存储数值本身,不会保留原始输入的小数位数信息,所以必须先读取用户输入的原始字符串,统计小数位数后再转换为数值计算。

修改后的可运行代码

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char input_buf[64] = {0};
    double number, fourthRoot;
    int precision = 0;
    char *dot_pos = NULL;

    printf("Enter a number: ");
    // 先读取原始输入字符串
    scanf("%s", input_buf);

    // 统计小数位数
    dot_pos = strchr(input_buf, '.');
    if (dot_pos != NULL) {
        // 小数点后剩余的字符数就是小数位数,可自行扩展过滤非数字字符的逻辑
        precision = strlen(dot_pos + 1);
    }

    // 字符串转double做计算
    number = atof(input_buf);
    fourthRoot = sqrt(sqrt(number));

    // 用*动态指定精度输出
    printf("4th root of number %.*lf is %.*lf", precision, number, precision, fourthRoot);

    return 0;
}

代码逻辑说明

  • 首先用字符数组接收用户的原始输入,保留输入的格式信息
  • 通过strchr查找小数点位置,统计小数点后的字符数作为输出精度,无小数点时精度为0
  • 调用atof将字符串转换为双精度浮点数完成四次方根计算
  • 最后使用%.*lf格式符,将统计得到的精度作为参数传入printf,实现输出小数位数和输入一致
  • 如果需要处理非法输入、科学计数法输入等特殊场景,可以在此基础上扩展字符串校验逻辑即可

内容的提问来源于stack exchange,提问作者nocomment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:27:01