谁能编个简易计算器,10.1-10=0.1也没问题的 老师让我们编个delphi的简易计算器,其中扯到2进制的问题,以至10.1-10不等于0.1,我用循环乘10的方法虽然解决了,但是觉得不够好,谁有更好的方法请教一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 FloatToStr(10.1-10)怎么牵扯到二进制了? 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.1end; 楼上已经列出代码了,是精度问题用double就可以了不要用float 根据10转2的算法“乘2取整”,十进制小数转二进制小数绝大部分都是无限循环小数,不光是1,而且本身浮点数的定义就是“近似表示某一个实数”,浮点数就是近似值,任何浮点数都有精度,即10.1这个数本身在计算机内也是近似表示的,减去10的结果当然也是近似表示。你可以查一下IEEE754标准,精度还是很高的。这个用来计算工资等货币数值时没有任何问题,我记得货币要求的精度是小数点后6位,我一般就保留3位。 很好奇那个学校要求学delphi啊,我们都是学c 还有部分学校要求学java Delphi怎么定义一个有返回值的方法。 问一个 比较 菜的问题,关于 adoquery 的返回值的…… 在线等 自定义的子窗体显示不正确呀? 求一个UPDATE 指定记录号的 SQL语句? 如何使用管理员帐户从局域网内远程机子下载和上传文件? 急急!!!“连接占线,导致另一个命令”异常如何避免!!! 读无类型文件问题:blockRead可否操作动态数组?杂线等候,谢谢! Interbase数据库太慢了? Delphi开发的ocx调用java开发的webservice,调不通 ***一个简单的问题:怎么定义几个单元中都用的变量?*** 请教一个问题。。。。 这个分组合计用SQL如何写?
怎么牵扯到二进制了?
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;
用double就可以了
不要用float
而且本身浮点数的定义就是“近似表示某一个实数”,浮点数就是近似值,任何浮点数都有精度,即10.1这个数本身在计算机内也是近似表示的,减去10的结果当然也是近似表示。你可以查一下IEEE754标准,精度还是很高的。
这个用来计算工资等货币数值时没有任何问题,我记得货币要求的精度是小数点后6位,我一般就保留3位。