C打印很长时间才能浮动

时间:2017-05-06 08:38:37

标签: c

我有两个long long(int)值,我想以3位精度打印浮点格式的除法。我已经读过了 printf and long double,但所有这些建议都会导致nan作为printf的结果。 E.g。

  long long a = 123123123;
  long long b = 123123124;
  printf("%d\n", b/a);
  printf("%.3f", b/a);

第一次打印将输出1(按预期方式),但第二次0.000代替1.xxx

1 个答案:

答案 0 :(得分:1)

除了第一个,printf不检查传递的参数或字符串的格式化参数的数量与参数(大多数编译器可以警告你有关问题,但是不保证)

b/along long类型。

因此,即使第一种printf类型有效,

也会更好
printf("%lld\n", b/a);

第二个printf根本不起作用,因为参数被解释为double,但未转换(尽管传递float也可行:How does printf and co differentiate beetween float and double ),由于printf函数的varadic性质(你几乎可以将任何东西作为参数传递,因此它不安全)。您必须明确地将其转换为double,例如:

printf("%.3f", (double)b/a);

请注意,(double)(b/a)也可以使用,但是您会丢失小数部分