muwind 发表于 2020-6-14 18:51:21

有效位函数(fysf)

本帖最后由 muwind 于 2020-6-14 19:27 编辑

;10多年前写的,实现如下功能(公司规定):;当数大于100时,无小数,
;当数小于100大于10,保留1位小数
;当数大于0.1小于10时候,保留2位小数
;当数小于0.1时候,保留两位有效数字

;有效数字Significant figures
;原数字Original number
(defun FySF ( Original_num / NowDS )
(if (/= (getvar "DIMZIN") 8)
    (progn
      (setq NowDS(getvar "DIMSTYLE"))
      (setvar "DIMZIN" 8)
      (command "-dimstyle" "s" NowDS "y")
    )
)
;消除后续0,因为修改了变量会出现替代样式,本人有强迫症看不得。
;如果能确定"DIMZIN"的值是8,或者其他地方有设置,以上代码可以省略
   (cond   
      ((< Original_num 0.1)
          (rtos Original_num 2 (+ 1 (atoi (substr (rtos Original_num 1 0) 4)))))
      ((< Original_num 10) (rtos Original_num 2 2))   
      ((< Original_num 100) (rtos Original_num 2 1))
      (T (rtos Original_num 2 0))   
    )
)

;发出来一是求优化,一是分享下


xvjiex 发表于 2020-6-15 13:48:15

楼主用下来有什么问题吗?

muwind 发表于 2020-6-15 22:04:32

xvjiex 发表于 2020-6-15 13:48
楼主用下来有什么问题吗?

没发现没什么问题 ,正常使用
感觉有点啰嗦,^_^

xvjiex 发表于 2020-6-16 08:42:33

我也感觉很好,感谢分享!

Jan 发表于 2022-6-23 10:41:03

小白请教下大佬,这个怎么调用..直接存为.lsp吗?命令在哪设置

muwind 发表于 2022-6-23 22:41:00

另存为lsp的话你要加载一次
放在你的lisp函数库里面一起加载就可以直接调用了
( FySF 10.23511 ) 返回10.2
( FySF 1.023511 ) 返回1.02
( FySF 1023.511 ) 返回1023
( FySF 0.01023511 ) 返回0.01
( FySF 0.0123511 ) 返回0.012

我爱lisp 发表于 2024-9-30 09:31:23

很好,就找这个呢
页: [1]
查看完整版本: 有效位函数(fysf)