我正在尝试执行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 - 我尝试对类值进行类型转换,但没有结果。
答案 0 :(得分:1)
将值从double
转换为float
并返回并不能保证相同的结果。
在
printf("%.6f\n", q*p - (q*p*0.1));
这些值都转换为double
类型,并且计算在double
中完成。类型为double
的结果会直接发送到printf
。
在使用float
变量的另一种情况下,值将转换为double,计算以double结束,然后转换为float以进行赋值。在传递给printf
之前,该值将转换为double。
始终将double
用于浮点变量。