如题所述
第1个回答 2012-07-18
编译的时候有一个警告:
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型的!这样不容易出错。希望对您有所帮助!
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型的!这样不容易出错。希望对您有所帮助!
第2个回答 2012-07-18
可能你把它定义成float类型的,系统默认它是double型追问
是float 型的,,那为什么呢,能具体解释下吗?
追答这个要用二进制来分析它的精度。 你网上搜搜吧
追问哦ok thank you
追答不用谢
第3个回答 2012-07-18
难道你定义的变量有问题? 按理不会出现这种情况,浮点是精确到小数点后6位,访问到未初始化内存了?追问
这个我也不清楚
追答printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则
(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)
float型会被提升为double型。因此printf()只会看到双精度数。所以就是这个提升扩大了内存的范围,楼主把float换成double就不会出这个情况!
第4个回答 2012-07-18
你在什么环境下编写的程序?我在LINUX下打印的结果和你预想的是一样的追问
c-free