printf精度和说明符%g

double value = 3122.55; 
printf("%.16g\n", value); //output: 3122.55 
printf("%.17g\n", value); //output: 3122.5500000000002 

为什么上述%.16g给出确切的数字,而%.17g却不能?

因为%g使用的是最短的表示形式,当指定为%.16g的时候表示希望最短的表示形式的最大值为16的有效数字,如果表示16个以上有效数字的数组,则printf会缩短它,于是会减去末尾的2,留下3122.5500000000002,这实际上就是3122.55的最短形式。

所以,可以说%.17g给出了更加精确的结果,而%.16g只是一个近似的结果,如果想要更加精确的定位,请使用%f或者%F。

转自:http://cn.voidcc.com/question/p-xohbenwe-bme.html

你可能感兴趣的:(printf精度和说明符%g)