我知道之前已经问过这个问题但是在一堆我不能理解的不同情境中(因为我是c ++语言的新手,以前来自java)。我的问题与std::fixed
中的setprecision()
和iomanip
有关。
我有以下简单的双:
double price = 7.50001;
有了这个,我希望它按照正常价格输出:
cout<< "The price is:$" <<fixed<<setprecision(2)<< price <<endl;
但是现在由于std::fixed
每cout
我从现在开始使用的precision(2)
将6.5100000
。我的问题是如何回滚到先前的精度,即如果我添加另一个双精度6.5
,则输出将为6.200000
,6.2
之类的双精度将为6.15555
},6.15555
将为std::streamsize ss = std::cout.precision();
等(按照之前的规定)。
注意我已尝试按照google使用此功能:
6.50
...然后使用ss重置精度,但是这不起作用,因为输出仍然包含之前没有的尾随零。例如6.50
在输出6.5
之前输出def main():
print('Period of a pendulum')
Earth_gravity = 9.8
Mars_gravity = 3.7263
Jupiter_gravity = 23.12
print(' ')
pen = float(input('How long is the pendulum (m)? '))
if pen < 0:
print('illegal length, length set to 1')
else:
print(' ')
main()
(之前的任何双数都是如此,它会消除尾随零)。
答案 0 :(得分:2)
根据我的理解,你想要用不同的格式打印双打,这对于cout会做几次,但是使用不同的精度说明符:
std::streamsize defaultprecision = std::cout.precision(); // save default precision
std::cout.precision(1); // change default precision
cout << std::fixed; // enable fixed
double price = 6.5100000;
cout<< "The price is:$" << price <<endl;
price = 6.200000;
cout<< "The price is:$" << price <<endl;
std::cout.unsetf ( std::ios::fixed ); // disable fixed
std::cout.precision(defaultprecision); // restore default presicion
price = 6.15555;
cout<< "The price is:$" <<price <<endl;
输出:
6.5
6.2
6.15555
答案 1 :(得分:1)
double price = 6.511111;
std::ios state(NULL);
state.copyfmt(std::cout);
std::cout << "The price is:$" << std::fixed << std::setprecision(2)<< price << std::endl;
std::cout.copyfmt(state);
std::cout << "The price is:$" << price << std::endl;
输出:
The price is:$6.51
The price is:$6.51111
编辑:如果您经常需要它,可能是为此创建类并处理重构析构函数中的标志的选项,但对于您的简单示例,它似乎有点超过顶部。
答案 2 :(得分:0)
您可以自己定义重置机制:
#include <iostream>
#include <iomanip>
namespace format
{
class reset_type
{
std::ios state;
public:
reset_type() : state(nullptr) { state.copyfmt(std::cout); }
friend std::ostream& operator<<(std::ostream& os, reset_type& r)
{
os.copyfmt(r.state);
return os;
}
} reset;
}
int main()
{
const double price = 6.511111;
std::cout << "The price is: $" << std::fixed << std::setprecision(2) << price << "\n"
<< format::reset << "The price is: $" << price << "\n";
}
<强>输出强>:
The price is: $6.51
The price is: $6.51111