表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位,是不是百分比的字段类型设置不对什么的,新手求教啊???
y := 43 / 34;
ShowMessage(Format('%.2f', [y * 100]));
// y * 100 变成 100 分数, .2f 表示输出两位小数计算的时候,试试这样。
居然刚开始做,不要急。
多设点变量,注意编程规范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 表示输出两位小数
再打些断点,看看每一步都是神马值,立刻就明白了。够详细了吧,嘿嘿。
else ltrim(str(数量1*100/(数量1+数量2+数量3),10,2))+'%' end as 数量1百分比
from t
y := m / n; 这步报错,说:Incompatible types:'Integer' and 'Extended';
实在不知道要设置成什么类型,试了很多都不行,求解?