Visual Studio 2010 和 gcc/g++ 4.6.3 之间 iostream 行为的意外差异
Posted
技术标签:
【中文标题】Visual Studio 2010 和 gcc/g++ 4.6.3 之间 iostream 行为的意外差异【英文标题】:Unexpected difference in iostream behavior between visual studio 2010 and gcc/g++ 4.6.3 【发布时间】: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++
这种差异是可以接受的,还是其中一个编译器的错误?
【问题讨论】:
【参考方案1】:precision
的文档如下(强调我的):
浮点精度决定最大位数 写在插入操作上以表示浮点数 价值观。如何解释这取决于浮动字段是否 格式标志设置为特定符号(固定或科学) 或者未设置(使用默认表示法,不一定 相当于固定的或科学的)。
对于默认语言环境:
使用默认的浮点表示法,精度字段指定要显示的有意义数字的最大数量 总计计算小数点前和小数点后的值 点。请注意,它不是最小值,因此它不是 如果数字可以,用尾随零填充显示的数字 显示的位数少于精度。
在固定计数法和科学计数法中,精度字段精确指定要在小数点后显示多少位 点,即使这包括尾随的十进制零。数字 小数点前与此精度无关 案例。
听起来编译器使用不同的format flags。
【讨论】:
非零值是一致的,所以我认为这不是问题。以上是关于Visual Studio 2010 和 gcc/g++ 4.6.3 之间 iostream 行为的意外差异的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 gcc 和 Visual Studio 的“静态链接”和“动态链接”构建 C/C++ 程序?