打印%g和%f之间的零填充差
printf zero padding difference between %g and %f
我想了解为什么在printf中%g和%f格式的零填充工作方式不同。下面是一个示例程序:
#include <stdio.h>
int main()
{
double d = 0.10000000000001;
printf("%04.2fn", d);
printf("%04.2gn", d);
return 0;
}
输出0.10
00.1
这在Windows上的vc++和Linux上的gcc中都是可重复的。
为什么会这样?这是一种正确的行为吗?
更新:我找到答案了,但我想我还是把问题留下吧…
正确。根据C99 7.19.6.1/8:
中g
样式的规范除非使用了#标志,否则将从结果的小数部分删除任何尾随零,如果没有剩余的小数部分则删除小数点字符
当样式f
没有指定删除尾零时
当使用%g时,printf选择在最小位置提供最佳精度的格式。您可以猜到它是如何计算精度的,知道对于d = 0.10500000,它打印"00.1",而对于d = 0.10500001,它打印"0.11"。
可以通过std::cout对象的同名成员函数控制宽度和精度。
From doc at http://en.cppreference.com/w/cpp/io/basic_ostream精度管理浮点运算的十进制精度(std::ios_base的公共成员函数)宽度管理字段宽度(std::ios_base的public成员函数)
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 在c++中用vector填充一个简单的动态数组
- int(c) 和 c-'0' 之间的区别。C++
- 如何使用用户输入在C++中正确填充2D数组
- 在cuda线程之间共享大量常量数据
- 如何找到大小'x'数组是否完全填充,在C++?
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- 填充上编译器生成的复制构造函数之间的不一致
- 在继承多个空类时,了解GCC/Clang vs MSVC2015之间的不同填充规则
- 填充和保存线程之间的共享缓冲区
- 0-1之间的随机数生成以填充容器
- 确保结构成员之间没有填充,以便将结构用作数组
- OpenMP线程之间的矢量填充
- 有没有办法控制C++中结构成员(包括位字段)之间的填充
- 如何在没有多余整数的情况下填充整数之间的分隔符
- 创建一个3x3x3阵列.用0到9之间的随机值填充.输出数组.找出3个最小值和3个最大值的输出
- 为什么堆栈上对齐的整数之间有 8 个字节的"0xcc"填充?C++ 32位视窗7
- 打印%g和%f之间的零填充差
- Ncurses:在列之间创建填充空间