我现在要处理的数字这种形式:9.062705115038622E-4 或者-0.0018839088514177576 因为比较大用double 就不行了,比double 能存储的是extended吧?我现在要把以上数字的字符串转成extended类型再存在数组中,可是strtofloat截取之后精度就变了,比如说: 0.0022783474240102275用strtofloat后就是0.002278347424只有前12位。怎么办呢?
我还试了用val,结果还是一样只能截取到字符串的前12位,我该怎么办呢????求给位大神帮忙啊!!!!!!!!!
我还试了用val,结果还是一样只能截取到字符串的前12位,我该怎么办呢????求给位大神帮忙啊!!!!!!!!!
测试:
var
s: string;
x: extended;
begin
s := '0.0022783474240102275';
x := StrToFloat(s);
writeln(x:0:19);
end;
s: string;
dd: Extended;
Str: string;
vD: array[1..5] of Extended;
begin
s := '0.0022783474240102275';
dd:= StrToFloat(s);
vD[2]:= dd;
Str:= FormatFloat('0.000000000000000000000000000000', vD[2] );
end;
范围 -3.6 x 10^–4951 ~ 1.1 x 10^4932
精度 19..20二、你将 数据转为Extended,是要损失精度的
比如 -0.0018839088514177576
保存在Extended 实际值为 -0.00188390885141776(超过19位的四舍五入) 三、你的问题,涉及到高精度的计算
建议使用下列数组保存数据
A:array [-100..100] of byte;
-110..0保存小数点前数据
-1..-100保存小数点后数据 这样,可以加减乘除和比较运算,就是需要转换。(主要是按位进行运算)
var
x: extended;
begin
x := 9.062705115038622E-4; // x := StrToFloat('9.062705115038622E-4');
writeln(FormatFloat('0.###################', x));
end;