iOS float类型不精确
2015-11-18 15:36
1096 查看
如 float x = 0.01999999999
用nslog输出是 0.02
用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范围内却条件成立 修改后却不成立了 更多0分享到: |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:10 |
kye_jufei kye_jufei 本版等级: | #1 得分:5回复于: 2010-09-02 09:56:03 應該是條件代碼問題,你設置一個斷點,把每一步的結果show出來看一下結果。。。 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
bdmh bdmh 本版等级: 更多勋章 | #2 得分:15回复于: 2010-09-02 09:56:18 double的类型的存储比较特殊,你可以查看相关资料,虽然你给的是0.02的值,但是内存中可能是0.019999999999999 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
shao113112 shao113112 本版等级: | #3 得分:0回复于: 2010-09-02 09:59:40 引用 2 楼 bdmh 的回复: double的类型的存储比较特殊,你可以查看相关资料,虽然你给的是0.02的值,但是内存中可能是0.019999999999999 这点我了解,但是为什么通过str和float的2次转换就不出现这个问题了哈? |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
shao113112 shao113112 本版等级: | #4 得分:0回复于: 2010-09-02 10:00:51 引用 1 楼 kye_jufei 的回复: 應該是條件代碼問題,你設置一個斷點,把每一步的結果show出來看一下結果。。。 不是代码问题,应该是2楼说的0.0199999999999的问题 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
chenzhuo chenzhuo 本版等级: | #5 得分:5回复于: 2010-09-02 11:39:09 FieldByName(x[0]).AsCurrency -FieldByName(x[1]).AsCurrency |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
goodhj goodhj 本版等级: | #6 得分:0回复于: 2010-09-02 11:46:23 引用 5 楼 chenzhuo 的回复: FieldByName(x[0]).AsCurrency -FieldByName(x[1]).AsCurrency 正解 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
yuweihua86 yuweihua86 本版等级: | #7 得分:0回复于: 2010-09-02 11:46:49 如果是货币的还是用这个AsCurrency这个比较好把,我比较喜欢用value这个。 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
shao113112 shao113112 本版等级: | #8 得分:0回复于: 2010-09-02 12:21:45 谢谢楼上几位了。 其实我需要解释 strtofloat(Floattostr(cal)) 这个。。。 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
iamduo iamduo 本版等级: | #9 得分:15回复于: 2010-09-02 12:34:03 Floattostr(cal)根据本地设置(通常是小数点8位),已经做了精度调整。 然后再 StrToFloat 得到的值,自然跟 cal 有所区别。 还有,real 我记得没错的话,就是 single 吧。 single 是8位有效(含小数点前面的位数),8位之外的,就是随便什么数字都有可能。 可以用 Double 试试看,这个直接玩 16 位,相对来说准确多了。 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
shao113112 shao113112 本版等级: | #10 得分:0回复于: 2010-09-02 12:41:17 嗯,不错。谢谢大家啦。 |
相关文章推荐
- 【iOS】OC-时间转化的时区问题
- 【iOS】OC-时间转化的时区问题
- iOS 页面之间的跳转
- iOS开发—向右滑动手势实现返回
- iOS float转换为int并就近取整的问题
- iOS_Xcode7.0_真机调试出现"Could not find Developer Disk Image"
- IOS崩溃异常的处理
- iOS学笔记本45- TTTAttributedLabel 使用方法
- iOS开发库的列表
- 实现iOS7以前的TableViewGroupStyle的方法。
- iOS viewDidLayoutSubviews,viewdidload
- 苹果开发者账号申请流程--企业
- iOS审核秘籍:应用内容检查大法
- IOS6和IOS7的适配问题
- iOS应用发布中的一些细节
- iOS开发代码自动布局NSLayoutConstraint
- iOS GCD创建标准定时器,进入后台后任可继续定时,无需开启后台任务
- 利用NSCache提升效率
- iOS ---对json数组的解析
- nagios_client_V2_sh