如一下程式碼所示,在輸出資料時候cout
和printf
區別。
double ans = 0, max = 135.349, min = 3.88633;
ans = max * 2086458231 / min;
cout << ans << endl;
printf("%lf", ans);
輸出
7.26652e+010
72665192664.000000
為什麼會有這樣的不同呢?
習慣沉默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;
}
巴扎黑2017-05-16 13:26:08
cout是C++的語法,printf是C語言了,不過C保留了,在cstdio裡面
結果不同時因為cout對超長的浮點數默認採用了保留N位+科學計算法的形式,不過cout也是可以用參數格式化輸出的,例如
cout << setiosflags(ios::fixed) << f
就不用科學計數法了,更多的參數你可以查閱手冊
printf也可以格式化,非常方便