双变量不返回除法的正确值

时间:2017-07-10 04:36:24

标签: c

输入示例:356

356/100,被认为是3.56

但是我得到了3.0000000000,我正在使用ideone在线编译器进行C。

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

int main() {
    int n;
    double frac;
    scanf("%d", &n);
    frac = (n/100);
    printf("%lf", frac);


    return 0;
}

4 个答案:

答案 0 :(得分:3)

那是因为这里frac = (n/100);你正在进行简单整数运算(因为n被声明为int100被解释为{{1}除非另有说明,否则(任何整数都被视为一个int))。您需要做的是明确表示您要对小数点后的数字进行算术运算。一种方法是使用强制转换:int

如果您不使用演员表,则会按预期执行除法,但小数点后的数字将被删除。由于frac = ((double) n/100);被声明为fracdouble将被添加到最后。

答案 1 :(得分:2)

在C中,两个整数的除法结果(例如intshortlong)也是一个整数(这是违反直觉的,但它实现了这个出于性能原因的方式)。结果,5/2的结果是2而不是2.5。此规则仅适用于整数。因此,如果需要获得浮点结果,则除法运算中的至少一个数字必须是浮点类型。

如果是您的代码,如果您使用100.0代替100,则会获得所需的结果。您也可以使用强制转换或将n定义为double。 这应该有效:

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

int main() {
    int n; // You can define n as double but don't forget to modify scanf accordingly. 
    double frac;
    scanf("%d", &n);
    frac = (n/((double)100)); // Or, frac = (n/100.0)
    printf("%lf", frac);


    return 0;
}

答案 2 :(得分:0)

如果没有声明,你不能使用整数来调用除法。

例如 int / int会产生int

尝试将n声明为双重

double n; scanf("%lf", &n); frag = n/100;

答案 3 :(得分:-2)

输入数据类型是一个整数。

只需将其更改为double或float即可解决此问题。

int main() {
    double n;
    double frac;
    scanf("%d", &n);
    frac = (n/100);
    printf("%lf", frac);
    return 0;
}