首頁  >  問答  >  主體

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

為什麼會有這樣的不同呢?

PHPzPHPz2737 天前1631

全部回覆(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
  • 取消回覆