c - 从函数返回时小数部分丢失

标签 c

我在从函数传递十进制数时遇到问题 - 请查看代码。

我在位置 2 上的函数 main 的参数中搜索数字的这个函数工作得很好,但是如果我调用该函数,它不会返回小数部分。例如,输入是 15.25 - 函数取 15.25,但是当该值返回到变量时,它显示 15.00。你有什么想法吗?

顺便说一句:对于这个例子,我使该函数变得更加简单。

int arg_find(char *argv[]) { 
    double result;
    int i = 0;
    double dec = 1;
    while ((argv[2][i] >= '0' && argv[2][i] <= '9') || argv[2][i] == '.') {
        // lets say in argv[2] is 14.25
        if (argv[2][i] == '.') {
            decimal = true;
            i++;
        }
        if (decimal == true) {
            dec *= 10;
            result += (argv[2][i] - '0')/dec;            
            i++;
        } else {
            result = result * 10 + (argv[2][i] - '0');
            i++;
        }
    }
}

现在,当我调用该函数时

double result2;
result2 = arg_find(argv); //in result2 is 14

最佳答案

原因非常简单明了,因为您的函数 arg_find 返回一个整数而不是 float ,因此您面临问题。

您可以尝试将其定义为:

double arg_find(char *argv[])

而不是

int arg_find(char *argv[])

关于c - 从函数返回时小数部分丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166773/

相关文章:

c - 链表指针类型错误?

C预处理器展开顺序

c - 数组未打印正确的值

C - 将 IO 定向到管道,然后将其恢复回控制台

C/Glib,我是否正确截断了这个 gchar 数组?

c - 一个循环有多少个线程

c - 是否可以在另一个函数的定义中提供函数名称作为初始值设定项?

c - 如何在 Linux 命令提示符下限制输入数字?

c - 为什么 inet_ntoa 和 inet_ntop "reverse"字节?

c - 可编程 USB 加密狗