一个简单c语言程序输出的问题

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
程序如下:
int main()
{
long int i;
float b1,b2,b4,b6,b10,b11,b;
scanf("%ld", &i);
b1 = i*0.1;
b2 = b1 + (i-100000) *0.075;
b4 = b2 + (i-200000) *0.05;
b6 = b4 + (i-400000) *0.03;
b10 = b6 + (i-600000) *0.015;
b11 = b10 + (i-1000000)*0.01;
if(i<=100000)
b = b1;
else if(i<=200000)
b = b2;
else if(i<=400000)
b = b4;
else if(i<=600000)
b = b6;
else if(i<=1000000)
b = b10;
else
b = b11;

printf("bonus=%ld", b);

}
为什么一运行输出就是bonus=0?
求高手解答

 int main()
{
    long int i;
    double b1, b2, b4, b6, b10, b11, b;
    scanf("%ld", &i);
    b1 = i*0.1;
    b2 = b1 + (i - 100000) *0.075;
    b4 = b2 + (i - 200000) *0.05;
    b6 = b4 + (i - 400000) *0.03;
    b10 = b6 + (i - 600000) *0.015;
    b11 = b10 + (i - 1000000)*0.01;
    if (i <= 100000)
        b = b1;
    else if (i <= 200000)
        b = b2;
    else if (i <= 400000)
        b = b4;
    else if (i <= 600000)
        b = b6;
    else if (i <= 1000000)
        b = b10;
    else
        b = b11;
    printf("bonus=%lf\n", b);
    system("pause");
}

c语言是顺序结构,赋值语句是不能前推的 用 for switch case 解决

把最后一行输出代码改成下面这样:

  printf("bonus=%f", b);

%d对应的是整型

printf("bonus=%ld", b);改成printf("bonus=%f", b);