明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1219|回复: 5

[提问] 这个很奇怪的现像,两个值明明相等,但是用=或equal函数比较的时就是不相等

  [复制链接]
发表于 2014-12-25 23:10:06 | 显示全部楼层 |阅读模式
这个很奇怪的现像,两个值明明相等,但是用=或equal函数比较的时就是不相等,得到的是nil,看如下:
命令: (cdr(assoc '42 denlst))
1974.0
命令: (max (car lst) (cadr lst))
1974.0

然后用=或equa函数比较是否相等:得到结果是nil
命令: (= (cdr(assoc '42 denlst)) (max (car lst) (cadr lst)))
nil
命令: (equal (cdr(assoc '42 denlst)) (max (car lst) (cadr lst)))
nill


上面显示的两个表达式的值都是1974.0,为什么比较的时候就是不相等呢?不懂
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-12-25 23:20:48 | 显示全部楼层
只有将两个值转为字符串时再比较,才会有正确的结果
命令: (= (rtos (cdr(assoc '42 denlst))) (rtos(max (car lst) (cadr lst))))
T

命令: (equal (rtos (cdr(assoc '42 denlst))) (rtos(max (car lst) (cadr lst))))
T
发表于 2014-12-25 23:38:51 | 显示全部楼层
本帖最后由 wzg356 于 2014-12-25 23:44 编辑

看到的与实际不一致
(setq b(car (list 1974.0000001 2.0)))===1974.0
(setq a(cadr(assoc 3.0 (list(list 3.0 1974.0000002)))))====1974.0
(= b a)==nil


发表于 2014-12-26 09:25:33 | 显示全部楼层
(equal expr1 expr2 [fuzz])
(equal (cdr (assoc '42 denlst)) (max (car lst) (cadr lst)) 1e-9)   ; 1e-5 ...
发表于 2020-9-8 08:25:43 来自手机 | 显示全部楼层
先type一下楼上试试,
发表于 2020-9-8 09:04:41 | 显示全部楼层
浮点数总是有误差的,不可能相等。变成整数或字符串再比较才行。也可以相减,差值小于某个值就认为是相等
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 21:12 , Processed in 0.199228 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表