【问题标题】:Double becomes 0 when multiplied with intDouble与int相乘变为0
【发布时间】:2015-02-03 06:30:15
【问题描述】:

我试图在输入以分钟为单位的情况下以秒为单位存储用户输入。如果我输入 0.1,这应该是 6 秒,因为 0.1 分钟是 6 秒。

但是,由于某种原因,我的代码结果为零。

int main(int argc, char *argv[]) {
        if (argc != 6) {
                printf("Not enough arguments!\n");
                exit(1);
        }

        double sim_time, chance, time_served, sample_time;
        int num_tellers;


        sim_time = atoi(argv[1]) * 60; //These are in minute units
        chance = atoi(argv[2]);
        num_tellers = atoi(argv[3]);
        time_served = atoi(argv[4]) * 60;
        sample_time = atoi(argv[5]) * 60;

这里是命令行输入:./a.out 10 2 3 4 0.1

因此,我预计sample_time 为 6,但它为 0。这可能真的很愚蠢,但我无法弄清楚。

感谢任何帮助。

【问题讨论】:

    标签: c double type-conversion


    【解决方案1】:

    作用于浮点数/双打时使用atof() 而不是atoi()。

    atoi() 返回整数

    atof() 返回 double

    关于评论,用于实施目的:

    双atof(const char *str);

    如果有人不知道...double 和 float 之间的区别在于精确度。

    【讨论】:

    • 错了。 atof() 返回 double,而不是 float。
    • 嗯...有点真实,但函数名称来自float - atof()。编辑后的答案很清楚。
    • '某种'......?更准确地说:它返回一个浮点类型值,但是定义了三种fp类型:float、double和long double,函数实际上返回double ,而不是float。
    • 也许不是最好的词......无论如何,正如我所说,编辑答案,因为它很重要。谢谢。
    【解决方案2】:

    atoi()的签名是

     int atoi(const char *nptr);
    

    它将返回 int 值,而不是 float 或 double。在您的情况下,输入 0.1 返回为 0。

    如果您想要float 值,请尝试atof()。

    注意:作为建议,最好在直接使用argv[n]s 之前检查NULL。

    【讨论】:

    • 哦,我明白了。那么是否有类似 atoi 但返回 double 或 float 的东西?
    • @Renren29 使用atof()。
    • 问题中的代码已经通过检查argc == 6 来检查argv[n] 的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2012-12-12
    • 1970-01-01
    • 2018-01-04
    • 2011-08-25
    • 2016-01-03
    • 2015-03-25
    相关资源
    最近更新 更多