搜索

首页  >  问答  >  正文

C++中cout和printf的区别

如一下代码所示,在输出数据时候coutprintf区别。

double ans = 0, max = 135.349, min = 3.88633;
ans = max * 2086458231 / min;
cout << ans << endl;
printf("%lf", ans);

输出

7.26652e+010
72665192664.000000

为什么会有这样的不同呢?

PHPzPHPz2750 天前1649

全部回复(5)我来回复

  • 習慣沉默

    習慣沉默2017-05-16 13:26:08

    c++的格式化输出问题,cout默认输出浮点数的格式不是%lf,如果要设置输出的格式,可以参考下面的链接
    http://en.cppreference.com/w/...

    #include <iostream>
    
    int main() {
        double ans = 0, max = 135.349, min = 3.88633;
        ans = max * 2086458231 / min;
    
    
        std::cout << ans << std::endl;  // 7.2665e+10
    
        std::cout.setf(std::ios::scientific);
        std::cout << ans << std::endl;  // 7.266497e+10
    
        std::cout.unsetf(std::ios::scientific);
        std::cout.setf(std::ios::fixed);
        std::cout << ans << std::endl;  // 72664965432.070602
    
        printf("%lg\n", ans);   // 7.2665e+10
        printf("%lf\n", ans);   // 72664965432.070602
    
        return 0;
    }

    回复
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:26:08

    cout是C++的语法,printf是C语言了,不过C保留了,在cstdio里面
    结果不同时因为cout对超长的浮点数默认采用了保留N位+科学计算法的形式,不过cout也是可以用参数格式化输出的,比如
    cout << setiosflags(ios::fixed) << f
    就不用科学计数法了,更多的参数你可以查阅手册
    printf也可以格式化,非常方便

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 13:26:08

    cout默认的流输出有效位是6位,如果超过6位会自动格式化,整数长度超过6位会自动格式化为科学计数法。

    回复
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-16 13:26:08

    cin和cout是c++的代码,printf和scanf是c的代码。%f在c语言中是以十进制小数形式输出浮点型数据。

    回复
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:26:08

    cout是c++ iostream标准库里的输出方式,而printf是c语言保留下来的,cout默认的格式化输出和%lf不一样

    回复
    0
  • 取消回复