2011-01-30 59 views
3
float f1 = 123.125; 
int i1 = -150; 

f1 = i1; // integer to floating conversion 
printf("%i assigned to an float produces %f\n", i1, f1); 

输出:整数到浮动转换用C

-150 assigned to an float produces -150.000000 

我的问题是为什么结果具有.而不是7或8或一些数量的后6个零(000000)?

回答

7

这就是printf所做的。见man page在那里说

fF

双参数应在风格“[ - ] ddd.ddd”转换为十进制表示,其中的数字基数后的数字符等于精度规格。 如果精度丢失,应视为6;如果精度明确为零且不存在'#'标志,则不会出现基数字符。如果出现一个基数字符,至少有一个数字出现在它之前。低位数字应以实现定义的方式进行四舍五入。

(重点煤矿)

它无关,与150是如何表示为存储浮点数(事实上,它提升为double因为printf是可变参数)。

2

浮点运算不准确。 printf只显示零的数字

从文档:

的 小数点后位数默认数量为6个,但可以用精密现场 改变。如果出现小数点 ,则至少会出现一个 数字。将“double” 的值四舍五入为小数点后的正确数字 。

+0

为什么它附加了6个零。不是7或8个零。基于我的硬件的零的数量? – 2011-01-30 03:32:25

3

您看到的零的数量是由%fprintf转换使用的默认精度的结果。它基本上与整数到浮点转换无关。

3

因为C标准(§7.19.6.1)说在没有相反信息的情况下,%f会打印出6位小数。

f,F表示浮点数的双参数被转换为 十进制表示在样式[ - ] ddd.ddd,其中的数字 后的数字的小数点字符等于精确的规格。如果缺少 精度,则取为6;如果精度为零并且未指定#标志 ,则不会显示小数点字符。