明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: nt8011

[提问] 求教:cal计算大整数时错误

[复制链接]
 楼主| 发表于 2018-10-18 18:54:54 | 显示全部楼层
Bao_lai 发表于 2018-10-17 23:07
请试一试,如果出错就用底下这个吧。

你的程序测试后结果准确,能否帮忙修改下上面程序?非常感谢!
发表于 2018-10-21 12:55:09 | 显示全部楼层
本帖最后由 Bao_lai 于 2018-10-21 13:13 编辑

  1. (defun C:CALCU (/ ss ssl i e str el nstr p p1 ll l)
  2.     ;(if (not (member "GEOMCAL.ARX" (MAPCAR ' strcase (arx)))) ;无用代码出错
  3.     ;      (arxload "geomcal.arx")
  4.     ;)
  5.    
  6.     (setq csd (getint "\n请指定计算结果小数位精度:<2>"))
  7.     (if (= csd nil)
  8.         (setq csd 2)
  9.     )
  10.     (if (and (setq ss (ssget '((0 . "TEXT,TCH_TEXT"))))
  11.              (setq p (getpoint "\n请输入标注点位置: "))
  12.         )
  13.     (progn
  14.         (setq ssl  (sslength ss)
  15.             i    -1
  16.         )
  17.         (command "cal")(command) ;先调用command函数,避免后面计算失败。
  18.         (repeat ssl
  19.               (setq el   (entget (ssname ss (setq i (1+ i))))
  20.                     str  (strcat "1.0*" (cdr (assoc 1 el))) ;调整型为实数,除Bug。
  21.                     l    (caadr (textbox (list (assoc 1 el) (assoc 40 el))))
  22.                     ll   (+ l (* 4. (/ l (strlen (cdr (assoc 1 el))))))
  23.               ;nstr (rtos (c:cal str) 2 csd)
  24.               )
  25.               (setq nstr (rtos (c:cal str) 2 csd))  ;把这个单独拿出来了
  26.               (setq el (subst (cons 10 p) (assoc 10 el) el))
  27.               (entmake el) ;写计算式
  28.               (setq el (subst (cons 1 nstr) (assoc 1 el) el)
  29.                     p1 (mapcar '+ (list ll 0. 0.) p)
  30.                     el (subst (cons 10 p1) (assoc 10 el) el)
  31.               )
  32.               (entmake el);写结果
  33.               (setq p (mapcar '+ p (list 0. (- (* 1.5 (cdr (assoc 40 el)))) 0.))) ;计算下一个插入点
  34.         
  35.         )
  36.       )
  37.     )
  38.     (princ)
  39. )

发表于 2018-10-21 13:09:01 | 显示全部楼层
本帖最后由 Bao_lai 于 2018-10-21 13:11 编辑

已编辑改正,注意查收.
 楼主| 发表于 2018-10-22 14:47:03 | 显示全部楼层
本帖最后由 nt8011 于 2018-10-22 14:48 编辑
Bao_lai 发表于 2018-10-21 13:09
已编辑改正,注意查收.

经使用,完全解决了问题!   非常感谢!
发表于 2018-10-25 17:08:02 | 显示全部楼层
(c:cal (strcat "1.0*" num))
发表于 2019-6-22 13:36:27 | 显示全部楼层
整形数溢出错。只支持到32767,如果要用CAL函数,可以在表达式前面加一个“0.0+”或者“1.0*”,强制转为浮点数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 20:49 , Processed in 0.176533 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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