明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2570|回复: 11

四舍五入不用写函数

[复制链接]
发表于 2005-4-18 16:29:00 | 显示全部楼层 |阅读模式
(SETQ A 31.2564)


(fix (+ A 0.5))


31


(SETQ A 31.8564)


(fix (+ A 0.5))


32
发表于 2005-4-18 19:21:00 | 显示全部楼层
(defun sswr (data unit)
(setq b (/ (fix (+ (* data (expt 10.0 unit)) 0.5))
(float (expt 10.0 unit))
)
)
) 返回是实数了,是不是要判断一下,大家看着办吧
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-19 10:18:11 | 显示全部楼层
楼主这个不错,我只需要取整四舍五入就可以了。数学比较差,一下子脑子转不过来。
发表于 2020-4-19 10:18:00 | 显示全部楼层
楼主这个不错,我只需要取整四舍五入就可以了。数学比较差,一下子脑子转不过来。
发表于 2005-4-18 16:43:00 | 显示全部楼层
楼主的程序只能是取整数的四舍五入,不能对有小数位的进行四舍五入,所以程序要做得完美,还是要写个子函数。
 楼主| 发表于 2005-4-18 16:51:00 | 显示全部楼层
(SETQ A 31.2564)


(/         (fix                 (+ (* A 100) 0.5)                 ) 100)


31.26
发表于 2005-4-18 17:25:00 | 显示全部楼层
如果(SETQ A 31.25641455)保留6位,又如何呢? 实际上做到既通用又直观,最好写成子函数的类型,如: (defun sswr (data unit)
(setq b (/ (fix (+ (* data (expt 10 unit)) 0.5))
(float (expt 10 unit))
) )
)
发表于 2005-4-18 18:25:00 | 显示全部楼层
如果保留小数点前3位,楼上的该如何修改? :)


34666->35000
发表于 2005-4-18 19:29:00 | 显示全部楼层
本帖最后由 作者 于 2005-4-18 20:01:48 编辑

呵呵,大多数情况下是只对有小数进行四舍五入。看看还是飞哥的程序完整!
发表于 2005-4-18 23:08:00 | 显示全部楼层
用rtos和read不行吗?(read (rtos 31.26 2 0))返回31 ,(read (rtos 31.26 2 1))返回31 .3 ,不行吗?对于整数,可先除以10的n次方,照前办理后,再将结果乘以10的n次方,好象没问题啊
发表于 2005-4-19 09:22:00 | 显示全部楼层
数位长度(包括小数点)在17位之内,用rtos和read不会丢失信息,如要对一个数保留8位小数:


(setq a (read (rtos 123.123456789 2 8)))        ,


用编辑器中的"检验"工具或在命令行执行此表达式,将返回123.123,看似丢失了信息,其实是显示的问题.它受系统变量DIMDEC影响,将DIMDEC值设得高些,就会显示的多些,而系统内部保存的仍然是8位小数,不信可做以下测试:


(rtos a 2 8),将返回123.12345678,


可见仍然是8位小数.包括系统在运算过程中都是按规定的位数运算.但数位超过17,就会丢失信息,要另想办法,版主已有这个函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 12:40 , Processed in 0.191113 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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