是否从格式为%.1f的printf中查找舍入数字的意外错误? 我用G++5.4.0/DEV C++ 5.11编译和运行C++代码时,答案是出乎意料的。有人能帮我吗 #include <iostream> #include <cstdio> using namespace std; int main() { double b = 36.25; printf("%.1f\n", b); return 0; }

是否从格式为%.1f的printf中查找舍入数字的意外错误? 我用G++5.4.0/DEV C++ 5.11编译和运行C++代码时,答案是出乎意料的。有人能帮我吗 #include <iostream> #include <cstdio> using namespace std; int main() { double b = 36.25; printf("%.1f\n", b); return 0; },c++,printf,rounding,C++,Printf,Rounding,运行结果为:36.2, 这不是36.3对数字36.25四舍五入的首选结果 帮助!!谢谢!!不,你的代码工作正常这是规则 36.25的整数输出也是36.2,因为 在四舍五入的数字中,如果第一个数字是5,则所有 五后面的数字是零,或者如果没有数字 在5之后,则最后保留的数字应保持不变,如果 最后一个数字是偶数。例如,如果只保留一个小数点, 然后6.6500变为6.6 欲了解更多信息,请访问 因此,结果也是36.2。如果您更改了测试用例,例如36.75 #include <iostream>

运行结果为:36.2, 这不是36.3对数字36.25四舍五入的首选结果


帮助!!谢谢!!

不,你的代码工作正常这是规则

36.25的整数输出也是36.2,因为

在四舍五入的数字中,如果第一个数字是5,则所有 五后面的数字是零,或者如果没有数字 在5之后,则最后保留的数字应保持不变,如果 最后一个数字是偶数。例如,如果只保留一个小数点, 然后6.6500变为6.6

欲了解更多信息,请访问

因此,结果也是36.2。如果您更改了测试用例,例如36.75

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
     double b = 36.75;
     printf("%.1f\n", b);
     return 0;
}  
现在,第二种情况是,如果5之后的值不是eqal零

#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int main(){
    double i=36.252;
        printf("%.1f",i);
        return 0;
}

我认为这对您有帮助。

@ UR2564 301:C++标准遵循Prtf的行为C标准。C标准说,对于f转换说明符,“值被四舍五入到适当的位数。”尝试36.75而不是36.25。你知道“36.8”吗?我在macOS 10.13.2上使用LLVM 9.0.0,clang-900.0.39.2,所以我希望它的库使用的舍入规则是将关系舍入到偶数。g++可能也在做同样的事情。C标准指定了在fenv.h中更改舍入方法的方法,但g++5.4不支持这些方法,因此我不希望您能够更改库进行舍入的方式。你必须手动计算你想要的结果,然后打印出来。我手头上没有GCC 5.4,但使用在线web界面编译器测试GCC 5.3和6.3可以确认36.25生成36.2,36.75生成36.8,因此GCC 5.4几乎可以肯定地使用四舍五入规则生成最接近的值,如果是平局,选择偶数。感谢您的回复。当我按如下方式运行代码时:int main{double a=36.2;printf%.1f\n,a;double b=36.225;printf%.2f\n,b;double c=36.2225;printf%.3f\n,c;返回0;}结果分别是36.2、36.23和36.222。第一个和最后一个圆到地板,第二个圆到天花板。看起来最后一个数字并不相等。这个舍入规则完全把我弄糊涂了。不,值对地板或天花板不是舍入的。这是一条数学规则,如果一个小于5的值后面没有任何数字,那么它就不会是圆的。这一次,你要访问并仔细阅读规则
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int main(){
    double i=36.252;
        printf("%.1f",i);
        return 0;
}
36.3