为什么c语言中定义一个变量f=123.456,printf("%f",f)时结果是123.456001,我认为是123.456000,望高手解答

2024-12-01 17:24:02
推荐回答(5个)
回答1:

float float,浮动的。:D

人类社会使用十进制,所以输入,输出都是按十进制来的。
而计算机中采用二进制,所以,你输入的数要转化为二进制存储。

十进制表面上的123.456,用二进制远不能用23个二进制比特位的尾码精确存储,只能四舍五入的转化为二进制存储。当取出时就不能还原原本的十进制123.456,这样就出现了浮点数的精确度问题。

回答2:

编译的时候有一个警告:
warning C4305: 'initializing' : truncation from 'const double' to 'float'意思是:不能将const double类型的值直接赋予float类型变量。对于这个问题您首先要搞清楚float型与double型的区别与联系了,float是单精度浮点型,而double是双精度浮点型,一般情况下,float是占4个字节,double占8个字节。你把f改为double型的,即double f=123.456;;就OK了,给您个小建议:以后用到小数类型的变量都把他们定义成double型的!这样不容易出错。希望对您有所帮助!

回答3:

可能你把它定义成float类型的,系统默认它是double型

回答4:

难道你定义的变量有问题? 按理不会出现这种情况,浮点是精确到小数点后6位,访问到未初始化内存了?

回答5:

你在什么环境下编写的程序?我在LINUX下打印的结果和你预想的是一样的