提问人:463035818_is_not_an_ai 提问时间:3/17/2023 最后编辑:463035818_is_not_an_ai 更新时间:3/17/2023 访问量:190
std::cin >> setprecision(n) 有什么用?
Whats the use of std::cin >> setprecision(n)?
问:
cppreference 说道:
在表达式 或 中使用时,将流的精度参数 或 精确地设置为 。
out << setprecision(n)
in >> setprecision(n)
out
in
n
同一页面底部的示例演示了 的用法。std::cout
同样对于输入流,该页面解释说,这实际上与调用调用 的函数相同。但是为了什么呢?有什么作用?str >> setprecision(n)
str.precision(n)
std::cin >> setprecision(n)
此代码
#include <iostream>
#include <iomanip>
int main() {
double d;
std::cin >> std::setprecision(1) >> d;
std::cout << d << "\n";
std::cin >> std::fixed >> std::setprecision(2) >> d;
std::cout << d << "\n";
}
使用此输入:
3.12
5.1234
生成以下输出:
3.12
5.1234
所以看起来它根本没有效果。阅读有关 std::ios_base::p recision
的信息,似乎精度只对流有意义:
管理由 执行的浮点输出的精度(即生成了多少位数)。
std::num_put::do_put
当根据 cpppreference 有效地调用仅影响输出时,可以传递的原因是什么?std::setprecision
std::istream::operator>>
str.precision(n)
答:
使用 with on a 或 on a 具有完全相同的效果,仅影响如何处理流上的输出。precision 属性存储在虚拟基类中,该基类在输入和输出流之间是统一的,这就是为什么它仍然可以在输入流上工作的原因。setprecision
<<
std::basic_ostream
>>
std::basic_istream
std::ios_base
但是在纯输入流上,我没有看到它的任何应用。但是,在双向流上,这允许同时使用两者或设置输出精度。<<
>>
我不清楚允许是否有特定的好处。这最初不在第一个C++标准草案中,而是与CD投票注释一起添加到C++98中,请参阅N1064中的注释CD2-27-015。不幸的是,该评论没有给出理由。setprecision
>>
评论
std::setprecision
>>