Lig*_*ica 4 c++ iostream std c++03
以下代码的输出:
#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按照我的意愿行事?
R. *_*des 12
在固定宽度模式下,"精确"设置用作小数位数,而科学模式则用作有效位数.IOStreams没有提供使用"precision"作为有效数字的机制而不使用科学模式.
还有第三种模式,它在C++ 11中被激活std::defaultfloat.如果您未设置固定模式或科学模式,则可以使用此"默认"模式.您可以通过重置浮点标志在C++ 03中重新激活它s.unsetf(std::ios_base::floatfield).这种模式在科学和某种"固定而没有拖尾零"之间有点混合.
| 归档时间: | 
 | 
| 查看次数: | 446 次 | 
| 最近记录: |