我现在要处理的数字这种形式:9.062705115038622E-4 或者-0.0018839088514177576   因为比较大用double 就不行了,比double 能存储的是extended吧?我现在要把以上数字的字符串转成extended类型再存在数组中,可是strtofloat截取之后精度就变了,比如说: 0.0022783474240102275用strtofloat后就是0.002278347424只有前12位。怎么办呢?
我还试了用val,结果还是一样只能截取到字符串的前12位,我该怎么办呢????求给位大神帮忙啊!!!!!!!!!

解决方案 »

  1.   

    还是不要转吧 直接把string存储到数组不一样吗?
      

  2.   

    delphi32是没有问题的,delphi64中extended=double,所以精度就达不到19/20位了,但是double也有15/16位,不会只有12位。
    测试:
    var
      s: string;
      x: extended;
    begin
      s := '0.0022783474240102275';
      x := StrToFloat(s);
      writeln(x:0:19);
    end;
      

  3.   

    存进数组,然后再取出来还是你这个数啊var
        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;
      

  4.   

    直接转不行吗 strtofloat
      

  5.   

    谢谢你的回复,我可能没表达明白,我现在要处理的数是存在记事本中的字符,9.062705115038622E-4 或者-0.0018839088514177576 这种形式,里面有e的,我取出来可以放在数组中,但是我得将这么小的数乘上一个小数(结果就变更小了),然后再存起来,这样得到多个结果后再将极其小的数(类似这种形式:9.062705115038622E-4 或者-0.0018839088514177576)比较求得最大的数。我可以适当降低精度以保证计算速度,现在的难题是这种数中有e,无法直接截取前XXX位,上面的数是java生成的,到了delphi上就不好处理了,我还要将他们乘上小数再求和再排序,有什么好的思路吗?谢谢啦!
      

  6.   

    谢谢你的回复,我可能没表达明白,我现在要处理的数是存在记事本中的字符,9.062705115038622E-4 或者-0.0018839088514177576 这种形式,里面有e的,我取出来可以放在数组中,但是我得将这么小的数乘上一个小数(结果就变更小了),然后再存起来,这样得到多个结果后再将极其小的数(类似这种形式:9.062705115038622E-4 或者-0.0018839088514177576)比较求得最大的数。我可以适当降低精度以保证计算速度,现在的难题是这种数中有e,无法直接截取前XXX位,上面的数是java生成的,到了delphi上就不好处理了,我还要将他们乘上小数再求和再排序,有什么好的思路吗?谢谢啦!
      

  7.   

    一、Extended 超长浮点数
    范围  -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保存小数点后数据 这样,可以加减乘除和比较运算,就是需要转换。(主要是按位进行运算)
      

  8.   

    谢谢你的回复,我可能没表达明白,我现在要处理的数是存在记事本中的字符,9.062705115038622E-4 或者-0.0018839088514177576 这种形式,里面有e的,我取出来可以放在数组中,但是我得将这么小的数乘上一个小数(结果就变更小了),然后再存起来,这样得到多个结果后再将极其小的数(类似这种形式:9.062705115038622E-4 或者-0.0018839088514177576)比较求得最大的数。我可以适当降低精度以保证计算速度,现在的难题是这种数中有e,无法直接截取前XXX位,上面的数是java生成的,到了delphi上就不好处理了,我还要将他们乘上小数再求和再排序,有什么好的思路吗?谢谢啦!大半年还没解决?这种问题也算个事...
    var
      x: extended;
    begin
      x := 9.062705115038622E-4;  //   x := StrToFloat('9.062705115038622E-4');
      writeln(FormatFloat('0.###################', x));
    end;