【问题标题】:Unexpected difference in iostream behavior between visual studio 2010 and gcc/g++ 4.6.3Visual Studio 2010 和 gcc/g++ 4.6.3 之间 iostream 行为的意外差异
【发布时间】:2014-10-01 18:11:55
【问题描述】:

考虑以下代码sn-p:

ofstream o("myFile.txt");

o.precision(14);
o.width(20);
o.setf(ios::showpoint);
o.setf(ios::internal);
o.fill(' ');

double zero = 0.0;

o << zero;

结果是:

0.000000000000000 //Visual Studio 2010

0.0000000000000 //g++

这种差异是可以接受的,还是其中一个编译器的错误?

【问题讨论】:

    标签: c++ visual-studio-2010 visual-studio gcc iostream


    【解决方案1】:

    precision 的文档如下(强调我的):

    浮点精度决定最大位数 写在插入操作上以表示浮点数 价值观。如何解释这取决于浮动字段是否 格式标志设置为特定符号(固定或科学) 或者未设置(使用默认表示法,不一定 相当于固定的或科学的)。

    对于默认语言环境:

    • 使用默认的浮点表示法,精度字段指定要显示的有意义数字的最大数量 总计计算小数点前和小数点后的值 点。请注意,它不是最小值,因此它不是 如果数字可以,用尾随零填充显示的数字 显示的位数少于精度。

    • 在固定计数法和科学计数法中,精度字段精确指定要在小数点后显示多少位,即使这包括尾随的十进制零。数字 小数点前与此精度无关 案例。

    听起来编译器使用不同的format flags

    【讨论】:

    • 非零值是一致的,所以我认为这不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多