关于visual studio中的警告:初始化:从“double”转换到“float”截断和初始化:从“double”转换到“float”,可能丢失数据的区别

  最近在敲代码时,突然好奇vs错误列表中对于初始化出现的警告问题,想着把它弄懂一些,以下是个人的总结(如有错误恳请指正)。
  
一、问题描述
  在初始化变量时,时常出现如下的警告:
请添加图片描述
  虽然不影响我们程序的正常编译,但是多少会让感觉不舒服。
  
二、解决方法
1、在初始化时,如果遇到“截断”的警告:
警告 C4244 “初始化”: 从“double”转换到“float”截断
处理前:

float a = 8.1;

处理后:

float a = 8.1f;

  
2、在初始化时,如果遇到“可能丢失数据”的警告:
警告 C4244 “初始化”: 从“double”转换到“float”,可能丢失数据
处理前:

double x = 8.1;
float y = x;

处理后:

double x = 8.1;
float y = (float) x;

  

三、区别解释
1、如上述的例子1,变量a在初始化时直接用小数8.1进行赋值,但在 C 语言中,如果不指定数据类型,那么小数常量会被认为是 double 类型。double型转float型需要进行数据截断。但对于用户而言,这只是一个小数(当没有输入精度要求时),故编译器只是告诉你这个地方计算机截断过了一次而已。
  
2、在例子2中,8.1是double型,赋值给同为double型的x,故第一句不会发出警告。
  但是在第二句中,把double型的x赋给float型的y时,调试器会认为你忘记了x是一个double型(如果记得的话,你就会先把x强制转换成float型再进行赋值的,如处理后的那样)。故编译器会说你是不是没注意到呀,这里可能会丢数据哦(当有效位数多时可能真就会丢数据)。
  总之,在用具体的小数给float初始化时,会显示截断;变量之间赋值时,显示的是可能丢失数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值