首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么std::six精度(6)流超过六位数在固定宽度模式?

为什么std::six精度(6)流超过六位数在固定宽度模式?
EN

Stack Overflow用户
提问于 2014-03-03 15:15:50
回答 1查看 548关注 0票数 4

以下代码的输出:

代码语言:javascript
运行
复制
#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做我想做的事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-03 15:20:34

在固定宽度模式下,“精度”设置用作小数位数,而科学模式则用作重要数字数。IOStreams没有提供任何机制来使用“精度”作为重要数字的数量,而不使用科学的模式。

还有第三种模式,在C++11中是用std::defaultfloat激活的。如果您不设置固定或科学模式,则此“默认”模式就是您所得到的。您可以在C++03中通过用s.unsetf(std::ios_base::floatfield)重置浮标来重新激活它。这种模式是科学和某种“固定的没有尾随的零”的混合。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22150400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档