Hermione 发表于 2017-10-29 14:01:02

整数相除,可否规定输出类型为小数?如可以,该引用什么头文件?

本帖最后由 Hermione 于 2017-10-29 14:25 编辑

int i, 1 / i希望得到小数,并且不希望用1 * 1.0 / i或者1.0 / i这种方法,可不可以用(float)规定输出类型?如果可以,是否需要什么头文件呢?
我是因为求PI近似值想到这个问题的。
#include <stdio.h>
#include <math.h>

int main()
{
    double sum;
    double stan = pow(10, -8);
    for(int i = 1; 1 * 1.0 / i >= stan; i += 2)
    {
            if (i % 4 == 1)
            {
                    sum = sum + 1 * 1.0 / i;
                    continue;
      }
      else
      {
              sum = sum - 1 * 1.0 / i;
                }
        }
        printf("PI的近似值为%f", 4 * sum);
    return 0;
}
觉得一遍遍用*1.0太麻烦了。

丶忘却的年少o 发表于 2017-10-29 14:05:18

printf("%f", 1/i);
就这样,输入类型用浮点型就可以了

Hermione 发表于 2017-10-29 14:24:32

丶忘却的年少o 发表于 2017-10-29 14:05
printf("%f", 1/i);
就这样,输入类型用浮点型就可以了

不行呀,
#include <stdio.h>
int main()
{
        int i = 3;
        printf("%f", 1 / i);
        return 0;
}
但是,输出为0.000000

丶忘却的年少o 发表于 2017-10-29 14:32:01

嗯,忘记强制了。不然结果还是整型,在强制转换,会损失很大
printf("%f", (float)1 / i);

hacker.jin 发表于 2017-10-29 22:39:55

丶忘却的年少o 发表于 2017-10-29 14:32
嗯,忘记强制了。不然结果还是整型,在强制转换,会损失很大
printf("%f", (float)1 / i);

printf("%f", 1f / i); 强转会丢失精度的好吧

丶忘却的年少o 发表于 2017-10-29 22:46:36

hacker.jin 发表于 2017-10-29 22:39
printf("%f", 1f / i); 强转会丢失精度的好吧

嗯,是会的。不过我想不出别的了{:10_278:}

hacker.jin 发表于 2017-10-30 09:45:04

丶忘却的年少o 发表于 2017-10-29 22:46
嗯,是会的。不过我想不出别的了

在字面量后面加个f 或者printf(“%f”,1/((float)i))

丶忘却的年少o 发表于 2017-10-30 10:50:36

hacker.jin 发表于 2017-10-30 09:45
在字面量后面加个f 或者printf(“%f”,1/((float)i))

把1强制转换也可以吧?

zqianglh 发表于 2017-10-30 21:24:23

嫌麻烦就定义一个 double类自变量double不能转float   
要输出float 就全部定义成float后面加个F0.001F

hacker.jin 发表于 2017-11-1 23:40:57

丶忘却的年少o 发表于 2017-10-30 10:50
把1强制转换也可以吧?

1不需要强制转换,1是字面量,改成1f就好了,1.0f也可以

echo000 发表于 2017-11-13 20:28:33

Hermione 发表于 2017-10-29 14:24
不行呀,
#include
int main()


是1.0/i呢
因为强制类型转换
页: [1]
查看完整版本: 整数相除,可否规定输出类型为小数?如可以,该引用什么头文件?