int(%d)和%。0lf之间有什么不同?

时间:2017-08-24 10:50:59

标签: c++ printf c++14

在C ++中

int a, b, c;
double k;

scanf("%d %d %d", &a, &b, &c);
k = (double)a*a/(b*b + c*c);
printf("%.0lf %0.lf %d", sqrt(b*b*k), sqrt(c*c*k), (int)sqrt(c*c*k);

例如, 输入:52 9 16 输出:25 45 45

但是,我认为那些是不同的。 实际上,在网上判断中判断的不同。

有什么不同?

    printf("%.0lf %0.lf %d", sqrt(b*b*k), sqrt(c*c*k), (int)sqrt(c*c*k);

在上面的句子中,l,而不是1。

根据编译器的不同而不同吗?

2 个答案:

答案 0 :(得分:0)

printf("%d", (int)sqrt(...))中,强制转换整数会将数字截断为整数,因此2.9变为2 - %d打印出来。

但在printf("%0.lf", sqrt(...))中,浮点数舍入为零十进制数,因此2.9写为3.

因此,如果答案不是整数,结果可能会有所不同。

答案 1 :(得分:-1)

这两件事

  • %d表示十进制(带符号)整数
  • %lf表示 long float 现在称为 double 精度浮点数和
    • %.0lf表示小数点后零位数的双精度数,因此它基本上与整数相同。但是,当转换为int时,转换为%.0lf时,在转换为{{1}}时直接丢弃小数点后的数字,它会四舍五入到最接近的整数。

所以预期的输出完全一样。我不知道为什么你会期待不同的输出。