从printf中找到格式为%.1f的意外错误,以便舍入数字?

时间:2018-02-25 09:53:01

标签: c++ printf rounding

当我使用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;
}    

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

帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

不,您的代码正常运行,这是规则。

嗯,圆形数字输出36.25也是36.2因为

  •   

    在数字四舍五入时,如果第一个数字下降为5,则全部为   五个之后的数字为零或者没有数字   在5之后,如果那个,那么保留的最后一个数字应该保持不变   最后的数字是均匀的。例如,如果只保留一个小数,   然后6.6500变为6.6。

有关详细信息,请访问http://academic.brooklyn.cuny.edu/geology/leveson/core/linksa/roundoff.html

因此,结果也是36.2知道您是否更改了例如36.75的测试用例

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
     double b = 36.75;
     printf("%.1f\n", b);
     return 0;
}  

输出

36.8

现在,第二种情况是在5值不是等于零之后

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

正如预期的输出

36.3

我认为这个会对你有所帮助。