首页 > 其他分享 >iOS float类型不精确

iOS float类型不精确

时间:2023-08-03 14:01:23浏览次数:28  
标签:超差 0.02 float iOS strtofloat 精确 cal FieldByName


如 float x = 0.01999999999

用nslog输出是 0.02

例:要求对2个值进行0.02的超差判定
  第一次:
   if abs(FieldByName(x[0]).AsFloat -FieldByName(x[1]).AsFloat) >0.02 then
     showmessage('超差');      
    问题出现:>号前面值等于0.02时,显示超差。
  经过修改如下
      添加1个cal:real;
      cal := abs(strtofloat(FieldByName(x[0]).text) - strtofloat(FieldByName(x[1]).text));
      if  strtofloat(Floattostr(cal)) > 0.02 then
        showmessage('超差');
     这次,值0.02时没有显示超差。   
  

求解,为什么第一次取绝对值时明明0.02不属于>0.02范围内却条件成立
      修改后却不成立了





應該是條件代碼問題,你設置一個斷點,把每一步的結果show出來看一下結果。。。
double的类型的存储比较特殊,你可以查看相关资料,虽然你给的是0.02的值,但是内存中可能是0.019999999999999
这点我了解,但是为什么通过str和float的2次转换就不出现这个问题了哈?
不是代码问题,应该是2楼说的0.0199999999999的问
FieldByName(x[0]).AsCurrency -FieldByName(x[1]).AsCurrency
如果是货币的还是用这个AsCurrency这个比较好把,我比较喜欢用value这个。
其实我需要解释 strtofloat(Floattostr(cal)) 这个。。。
Floattostr(cal)根据本地设置(通常是小数点8位),已经做了精度调整。      
 然后再 StrToFloat 得到的值,自然跟 cal 有所区别。      
 还有,real 我记得没错的话,就是 single 吧。      
 single 是8位有效(含小数点前面的位数),8位之外的,就是随便什么数字都有可能。      
 可以用 Double 试试看,这个直接玩 16 位,相对来说准确多了。


标签:超差,0.02,float,iOS,strtofloat,精确,cal,FieldByName
From: https://blog.51cto.com/u_16124099/6948748

相关文章

  • 最新的iOS应用上架App Store详细流程解析
    最新的iOS应用上架AppStore详细流程解析2023已经过了2/3的时间,由于现在苹果签名市场的价格不断的上升,现在很多的开发商一直在想着如何进行上架一些自己的产品,下面小编来给大家梳理一下上架苹果市场的流程: 2020最新整理iOSapp上架app详细教程 上架iOS需要一个付费688的开......
  • 最新的iOS应用上架App Store详细流程解析
    最新的iOS应用上架AppStore详细流程解析2023已经过了2/3的时间,由于现在苹果签名市场的价格不断的上升,现在很多的开发商一直在想着如何进行上架一些自己的产品,下面小编来给大家梳理一下上架苹果市场的流程: 2020最新整理iOSapp上架app详细教程 上架iOS需要一个付费688的开......
  • 封装的axios请求
    axios实例常用配置letrequest=axios.create({baseURL:'http://localhost:8080',//请求的域名,基本地址timeout:5000,//请求的超时时长,单位毫秒url:'/data.json',//请求的路径method:'get,post,put,patch,delete',//请求方法headers:{token:''//比如to......
  • vue中使用axios发送请求时在header中设置请求头发现请求发送两次
    问题:vueaxios跨域请求,在RequestHeaders加Authorization传递Token时,发现统一请求触发了两次,第一次是RequestMethod:OPTIONS请求。原因:跨域请求时,浏览器会首先使用OPTIONS方法发起一个预请求,判断接口是否能够正常通讯。如果通讯异常,则不会发送真正的请求,如果测试通讯正常,则开......
  • 宏基笔记本BIOS密码
    1、重启后马上按shift键今天高级设置/或者按F2进BIOS2宏碁bios默认密码8位是需要通过您自己的电脑查看的哦,每台电脑的密码都不一样的,具体的查询方法如下:1、开机启动的过程按F2键,进入输入BIOS密码的界面,输入三次错误密码,2、选择第一个EnterUnlockPassword。3、记录Key后面的8个......
  • 盘点一对一源码iOS系统维持平台稳定功能(一):弹性扩缩容
    在移动互联网快速发展的时代,直播成为了一个火爆的行业,并成功进入到Android、iOS、鸿蒙系统中,人们只需具备网络与能下载直播平台的设备便可使用到一对一直播源码平台,所以几乎全世界的人们都成为了平台的用户,这就使得一对一直播源码平台的用户人数的庞大,但毕竟一对一直播源码平台是一......
  • 盘点一对一直播源码iOS系统维持平台稳定功能(一):弹性扩缩容
    在移动互联网快速发展的时代,直播成为了一个火爆的行业,并成功进入到Android、iOS、鸿蒙系统中,人们只需具备网络与能下载直播平台的设备便可使用到一对一直播源码平台,所以几乎全世界的人们都成为了平台的用户,这就使得一对一直播源码平台的用户人数的庞大,但毕竟一对一直播源码平台是......
  • 使用 Axios 进行 HTTP GET 请求的详尽指南
    在进行网络请求时,axios 是一个非常常用的请求库。本文将介绍如何使用axios发起GET请求,并详细列出传参的几种写法。同时会提供一个实践案例,其中包含基本路由与请求处理的过程,并确保在IDE编辑器中可以顺利运行。什么是axios的GET请求?在开始之前,让我们简要了解一下axios......
  • STM32采用主从计时器实现精确脉冲输出
         首先按前面所述的主从计时器要求配置好主从计时器,这是最基本的要求。主计时器负责设置脉冲输出的频率以及输出脉冲,从计数器所控制输出的脉冲数。具体过程是这样的,主进程启动主从计时器,从计时器通过主计时器输出的触发信号开始脉冲计数,当达到指定的计数值后,产生中......
  • 如何在Windows上将iOS应用上传到App Store
     ApplicationUploaderiOSApp上架工具是一款非常好用的针对iOS苹果应用程序软件开发的实用编程工具,它的主要作用是帮助用户进行快速的程序应用设计和程序应用调试,节省用户进行软件开发耗费的不必要时间!​编辑切换为居中添加图片注释,不超过140字(可选......