㈠ VC++编译时提示 从“double”到“float”截断 那“截断”是什么意思
在当前的计算机中,double类型存储占8字节,float类型存储占4字节,当两个不同类型的数据进行赋值时,系统进行隐式类型转换,高精度向低精度的赋值时,低精度变量无法完整存储高精度数据,系统会自动“截断”部分内容,完成数据转存,这样就有可能会造成数据精度丢失。
在C/C++语言中,浮点型常数的默认类型是double类型,如0.5 ,123.45等
若想得到float类型常数,则要在常数后加f 字符,如:0.5f , 123.45f等
当把double类型数据赋值给float类型变量时,系统编译时会报以下警告:
warning C4244: '=' : conversion from 'double' to 'float', possible loss of data (从double转成float,可能会造成数据丢失)
因此,数据间赋值一定要采用正确的类型,建议在使用浮点数时,只使用double类型。
㈡ C语言编程序时怎么控制浮点型输出的小数点精确到几位
使用输出格式说明符来指定精确到小数点位数。
如:
void main()
{
float a=345.234678;
printf("%.3f ", a) ;
}
其中%.3f里的3就表示输出精确到小数点后3位。
所以可参考的形式是printf("%m.nf",p);
%m.nf,指定输出的数据共占m列,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。
(2)浮点型数据编译扩展阅读:
实型变量分为两类:单精度型和双精度型,
其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
实型变量说明的格式和书写规则与整型相同。
例如: float x,y; (x,y为单精度实型量)
double a,b,c; (a,b,c为双精度实型量)
实型常数不分单、双精度,都按双精度double型处理。