系统提示 conversion from ✀double ✀ to ✀float ✀, possible loss of data错误!应该改哪?

#include<stdio.h>void main(){ long int i;float bonus1,bonus2,bonus4,bonus6,bonus10,bonus;bonus1=100000*0.1;bonus2=bonus1+100000*0.075;bouns4=bonus2+20000*0.05;bonus6=bonus4+200000*0.03;bonus10=bbonus6+400000*0.015;printf("i"); scanf("%ld",&i);if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bouns=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus)
2026年09月17日 02:17
有1个网友回答
网友(1):

warning C4244: '=' : conversion from 'double ' to 'float ', possible loss of data

Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式

浮点数(floating point number),占用4byte。

你的lixi定义为float, cunqi定义为double。benjin*cunqi*3.15/100.0。任何数和double型数运算得到结果为double。而把这个运算式的结果(double型)赋给lixi(float型),8字节的数赋给4字节的数,会造成数据损失,就好像得到3.1416,只能储存到3.14一样。所以会出这个警告。
一般来说,你这个程序在精度不高的情况下,这个警告无害。

解决办法:数据格式统一。cunqi改为float,或lixi改为double。