c – 为什么sprintf_s在不同版本的Visual Studio中给出不同的结果?

sprintf_s(buf,"%.*f",14,0.182696884245135);

在VS2008 = 0.18269688424514

在VS2015 = 0.18269688424513

sprintf_s的行为是否改变了?我怎样才能得到旧的行为?

解决方法

我们为 the Universal CRT和Visual C 2015重写了浮点解析器和格式化程序,以提高正确性.请参阅Visual C 2015的 Breaking Changes in Visual C++文档;有一节题为“浮点格式化和解析”.

Visual C 2015结果是正确的舍入结果.输入字符串0.182696884245135将转换为以下双精度值,这是最接近的可表示值:

0.18269688424513'49994693288181224488653242588043212890625

请注意第14个小数位后的刻度线.第15位是4,所以在用14位小数位格式化数字时,数字是“向下舍入”(或截断),而不是向上.

Visual C 2008结果不正确.我不知道在解析或格式化过程中是否引入了错误.使用Universal CRT和Visual C 2015无法获得旧的,不正确的行为.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...