输入示例: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;
}
答案 0 :(得分:3)
那是因为这里frac = (n/100);
你正在进行简单整数运算(因为n
被声明为int
而100
被解释为{{1}除非另有说明,否则(任何整数都被视为一个int))。您需要做的是明确表示您要对小数点后的数字进行算术运算。一种方法是使用强制转换:int
如果您不使用演员表,则会按预期执行除法,但小数点后的数字将被删除。由于frac = ((double) n/100);
被声明为frac
,double
将被添加到最后。
答案 1 :(得分:2)
在C中,两个整数的除法结果(例如int
,short
,long
)也是一个整数(这是违反直觉的,但它实现了这个出于性能原因的方式)。结果,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;
}