以下代码的输出:
#include <limits>
#include <iostream>
#include <iomanip>
#include <limits>
#include <string>
#include <sstream>
using namespace std;
inline string lexical_cast(const float arg)
{
stringstream ss;
ss << fixed << setprecision(numeric_limits<float>::digits10) << arg;
if (!ss)
throw "Conversion failed";
return ss.str();
}
int main()
{
cout << numeric_limits<float>::digits10 << '\n';
cout << lexical_cast(32.123456789) << '\n';
}
是:
6 32.123455
我期待,并希望:
6 32.1234
因为,据我所知,这就是float
能够在我的系统上可靠地提供给我的范围。
我怎样才能说服IOStreams做我想做的事?
发布于 2014-03-03 15:20:34
在固定宽度模式下,“精度”设置用作小数位数,而科学模式则用作重要数字数。IOStreams没有提供任何机制来使用“精度”作为重要数字的数量,而不使用科学的模式。
还有第三种模式,在C++11中是用std::defaultfloat
激活的。如果您不设置固定或科学模式,则此“默认”模式就是您所得到的。您可以在C++03中通过用s.unsetf(std::ios_base::floatfield)
重置浮标来重新激活它。这种模式是科学和某种“固定的没有尾随的零”的混合。
https://stackoverflow.com/questions/22150400
复制相似问题