2017-07-13 116 views
2

如教程中所示http://www.cplusplus.com/reference/iomanip/setprecision/** std :: setprecision()**沒有** std :: fixed **在C++中的作用是什麼?

// setprecision example 
#include <iostream>  // std::cout, std::fixed 
#include <iomanip>  // std::setprecision 

int main() { 
    double f =3.14159; 
    std::cout << std::setprecision(5) << f << '\n'; // prints 3.1416 and not 3.141459 why 
    std::cout << std::setprecision(9) << f << '\n'; 
    std::cout << std::fixed; 
    std::cout << std::setprecision(5) << f << '\n'; 
    std::cout << std::setprecision(9) << f << '\n'; 
    return 0; 
} 

的std :: COUT < <的std :: setprecision(5)不打印5個十進制數字但的std ::固定被設置後,該setprecision按預期工作。這是爲什麼 ?。

std :: setprecision()沒有std :: fixed是什麼作用?

回答

2

根據http://en.cppreference.com/w/cpp/io/ios_base/precision,精度決定多少數字被印刷,許多數字的浮點後沒怎麼被印刷:

std::ios_base::precision

管理精度(即多少個數字被產生的)漂浮 點輸出

這解釋了四捨五入。

是的,使用std::fixed將改變floatfield精度的解釋。據http://www.cplusplus.com/reference/ios/ios_base/precision/

在固定和科學記數法兩者的精度域 指定到底有多少個數字小數點後顯示, 即使這包括尾隨小數零。在這種情況下,小數點前 之前的數字與精度無關。

+0

然而,細節固定和非固定格式之間有所不同。 –

+0

我更新了答案 – Fabien

2

精度的含義取決於是使用固定的,科學的還是默認的格式。對於固定格式,它是小數點後的位數。對於科學而言,它也是 - 但總是有一個數字在點之前;指數用於將小數點轉換爲位置。對於默認格式,精度指定打印的總位數(大致;這有點複雜)。

有關詳情,請參閱http://en.cppreference.com/w/cpp/io/c/fprintf,特別是%f%e%g格式說明的說明(固定的,科學的和缺省格式,相應地)。指定std::cout << f的行爲好像調用printf("%.<precision><format>", f)(對於第一個近似值;實際情況再次稍微複雜一些,但細節與手邊的問題無關),其中<precision>setprecision指定的數字,以及<format>f,eg之一。

相關問題