表A定义了4个字段,总数、数量1、数量2、数量3、百分比,前面都是NUMBER型,百分比是VARCHAR2型,在DELPHI7里总数是这样求的:OraQuery.FieldByName('总数').AsInteger := OraQuery.FieldByName('数量1').AsInteger + OraQuery.FieldByName('数量2').AsInteger + OraQuery.FieldByName('数量3').AsInteger,现在要求百分比:OraQuery.FieldByName('百分比').AsString := floattoStr(((OraQuery.FieldByName('数量3').AsInteger) / (OraQuery.FieldByName('总数').AsInteger))*100) +'%';可是这样出来只有2种结果:总数=数量3时是100%,数量3是0时为0%,可当数量3(值不为0)、数量2、数量1都有值时百分比算出来也为0%,要怎么处理啊,能算出正确值,百分数后还保留2位,是不是百分比的字段类型设置不对什么的,新手求教啊???
         

解决方案 »

  1.   

    不要直接把运算结果保存在floattoStr里,这里有个系统的默认转换问题,先把结果保存在double类型变量里,然后再转换看看
      

  2.   


    y := 43 / 34;
    ShowMessage(Format('%.2f', [y * 100]));
    // y * 100 变成 100 分数, .2f 表示输出两位小数计算的时候,试试这样。
      

  3.   

    OraQuery.FieldByName('百分比').AsString := floattoStr(((OraQuery.FieldByName('数量3').AsFloat) / (OraQuery.FieldByName('总数').AsFloat))*100.0) +'%';
      

  4.   


    居然刚开始做,不要急。
    多设点变量,注意编程规范OraQuery.FieldByName('百分比').AsString := floattoStr(((OraQuery.FieldByName('数量3').AsInteger) / (OraQuery.FieldByName('总数').AsInteger))*100) +'%'可以改为:
    m := OraQuery.FieldByName('数量3').AsInteger;
    n := OraQuery.FieldByName('总数').AsInteger;
    y := m / n;
    OraQuery.FieldByName('百分比').AsString :=Format('%.2f', [y * 100]);
    // y * 100 变成 100 分数, .2f 表示输出两位小数
    再打些断点,看看每一步都是神马值,立刻就明白了。够详细了吧,嘿嘿。
      

  5.   

    你只有一个字段放百分比,到底是要求那个数量占总数的百分比?大家都说D的,我来提供一个用SQL语法求"数量1"的百分比select case when 数量1+数量2+数量3=0 then '0.00%'
    else ltrim(str(数量1*100/(数量1+数量2+数量3),10,2))+'%' end as 数量1百分比
    from t
      

  6.   

    m,n,y都设置成了integer型,可运行时
    y := m / n; 这步报错,说:Incompatible types:'Integer' and 'Extended';
    实在不知道要设置成什么类型,试了很多都不行,求解?
      

  7.   

    y设置成double型了,不报错了,谢谢!