老师让我们编个delphi的简易计算器,其中扯到2进制的问题,以至10.1-10不等于0.1,我用循环乘10的方法虽然解决了,但是觉得不够好,谁有更好的方法请教一下。

解决方案 »

  1.   

    FloatToStr(10.1-10)
    怎么牵扯到二进制了?
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      f:Single;
      ff:Double;
    begin
      f:=(10.1-10);
      ff:=(10.1-10);
      ShowMessage(FloatToStr(f));//0.100000001490116
      ShowMessage(FloatToStr(ff));//0.1
    end;
      

  3.   

    楼上已经列出代码了,是精度问题
    用double就可以了
    不要用float
      

  4.   

    根据10转2的算法“乘2取整”,十进制小数转二进制小数绝大部分都是无限循环小数,不光是1,
    而且本身浮点数的定义就是“近似表示某一个实数”,浮点数就是近似值,任何浮点数都有精度,即10.1这个数本身在计算机内也是近似表示的,减去10的结果当然也是近似表示。你可以查一下IEEE754标准,精度还是很高的。
    这个用来计算工资等货币数值时没有任何问题,我记得货币要求的精度是小数点后6位,我一般就保留3位。
      

  5.   

    很好奇那个学校要求学delphi啊,我们都是学c 还有部分学校要求学java