2014-01-15 69 views
1

在C语言中,我们可以这样写;如何在C++中写入小数点后的2位数字?

printf("%.2f", number); 

我该如何在C++中做到这一点?

std::cout << "The number is " << number; 
+4

http://en.cppreference.com/w/cpp/io/manip – chris

+0

[检查此示例](http://www.cplusplus.com/reference/iomanip/setprecision/)。 –

+1

应该是重复的... –

回答

5

您需要使用iomanip的东西,比如有:

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 
    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    return 0; 
} 

,输出:

3.14 

如果要本地化的更改(包括fixed的影响, setprecision永久更改流),您可以事先保存标志和精度,然后恢复它们:

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 

    std::cout << pi << '\n'; 

    // Save flags/precision. 
    std::ios_base::fmtflags oldflags = std::cout.flags(); 
    std::streamsize oldprecision = std::cout.precision(); 

    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    std::cout << pi << '\n'; 

    // Restore flags/precision. 
    std::cout.flags (oldflags); 
    std::cout.precision (oldprecision); 

    std::cout << pi << '\n'; 

    return 0; 
} 

的输出是:

3.14159 
3.14 
3.14 
3.14159 

表示以前的行为正在恢复。

+0

感谢您对这个答案 – gkhncns

+0

有一点需要注意:'的std :: setprecision(2)改变''的的std :: cout'状态,因此它会影响以后的任何浮点您打印的值。 –

+0

@凯蒂,好点。虽然它可能不一定适用于这个问题,但我会提及它并提供解决方法。 – paxdiablo

相关问题