为什么浮动c不能按预期的方式工作?

时间:2016-12-13 09:18:24

标签: c

我正在尝试执行codechef问题 - https://www.codechef.com/problems/FLOW009

在这里,我的代码(成功提交)就是这个 -

int main(void) {

   int testCases;

   scanf ("%d\n", &testCases);
   while (testCases--) {

       float q,p;
       scanf ("%f%f", &q,&p);

       if (q >= 1000){

           printf("%.6f\n",q*p - (q*p*0.1));
       }
       else{
           printf("%.6f\n", q*p);
       }

   }

   return 0;
} 

这已成功提交......但是当我尝试使用此代码时 -

int main(void) {

   int testCases;

   scanf ("%d\n", &testCases);
   while (testCases--) {

       float q,p;
       scanf ("%f%f", &q,&p);

       if (q >= 1000){
           float a = q*p - (q*p*0.1);
           printf("%.6f\n",a);
       }
       else{
           printf("%.6f\n", q*p);
       }

   }

   return 0;
} 

它说错了答案。在我的编译器中,所有测试用例的结果都是相同的。怎么了。第一个代码 - 我只是打印值。 在第二个 - 我使用变量来存储值。

PS - 我尝试对类值进行类型转换,但没有结果。

1 个答案:

答案 0 :(得分:1)

将值从double转换为float并返回并不能保证相同的结果。

printf("%.6f\n", q*p - (q*p*0.1));

这些值都转换为double类型,并且计算在double中完成。类型为double的结果会直接发送到printf

在使用float变量的另一种情况下,值将转换为double,计算以double结束,然后转换为float以进行赋值。在传递给printf之前,该值将转换为double。

始终将double用于浮点变量。