-->

Dividing 1/n always returns 0.0 [duplicate]

2018-12-31 17:32发布

问题:

This question already has an answer here:

  • C program to convert Fahrenheit to Celsius 8 answers
  • Why does division result in zero instead of a decimal? 6 answers

I am trying to calculate p1=(1/1)*(1/2)*...*(1/n) but something is wrong and the printf gives me 0.000...0

#include <stdio.h>

int main(void) {

    int i,num;
    float p3;

    do {
        printf (\"give number N>3 : \\n\" );
        scanf( \"%d\", &num );
    } while( num <= 3 );

    i = 1;
    p3 = 1;  

    do {
        p3=p3*(1/i);
        printf( \"%f\\n\",p3 );
    } while ( i <= num );

    printf(\"\\nP3=%f\",p3);
    return 0;
}

回答1:

(1/i)

i is an int, so that\'s integer division, resulting in 0 if i > 1. Use 1.0/i to get floating point division.



回答2:

1 is an integer, i is an integer. So 1/i will be an integer, ie the result will be truncated. To perform floating-point division, one of the operands shall be of type float (or, better, of type double):

p3 *= 1. / i;


回答3:

I had the same issue. The basic case:

  • when you want to get float output from two integers, you need to convert one into float

    int c = 15; int b = 8; printf(\"result is float %f\\n\", c / (float) b); // result is float 1.875000 printf(\"result is float %f\\n\", (float) c / b); // result is float 1.875000