发布网友 发布时间:2024-10-24 01:02
共2个回答
热心网友 时间:2024-10-24 04:54
conversion from 'double' to 'float', possible loss of data
翻译:从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
一般这种错误常见于:
用浮点常数给float类型变量赋值,如:float f=0.1 ; 正确写法为:float f=0.1f ;
调用返回值类型为double的函数,给float类型变量赋值,如:float f=pow(x,n); pow返回参数x的n次幂。 正确写法:float f=powf(x,n); //调用正确的函数
因此,数据间赋值一定要采用正确的类型,建议在使用浮点数时,只使用double类型。
热心网友 时间:2024-10-24 04:55
由高精度到低精度可能会有数据丢失,贴源码上来看看