当与int相乘时,Double变为0

时间:2014-12-05 06:16:00

标签: c double type-conversion

我想在几秒钟内输入用户输入,输入是几分钟。如果我输入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.这可能是非常愚蠢的东西,但我无法弄明白。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

atoi()的签名是

 int atoi(const char *nptr);

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

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

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

答案 1 :(得分:2)

当对浮动/ 加倍采取行动时,请使用atof()代替atoi()

atoi()返回整数

atof()返回 double

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

  

double atof(const char * str);

如果有人不知道...... doublefloat之间的差异是精确的。