乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 95|回复: 6

[编程交流] 整数舍入问题

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:59:13 | 显示全部楼层 |阅读模式
你好
我有一个小的取整问题,我就是无法解决。
脚本函数:
 
1) 选择图案填充(获取图案填充区域)
2) 选择属性并填写区域字段值
 
我设法将精度四舍五入到最接近的整数。
尽管我希望取而代之的是四舍五入最接近0.5。
 
例子:
84.1 -> 84
84.6 -> 84.5
84.7 -> 85
 
如果有人能给我指出正确的方向,我会非常高兴。
 
  1. (defun c:arf(/ fStr cObj vObj cTxt vTxt)
  2. (vl-load-com)
  3. (if
  4.    (and
  5.      (setq cObj(entsel "\nPick object with Area property"))
  6.      (vlax-property-available-p
  7. (setq vObj(vlax-ename->vla-object(car cObj))) 'Area)
  8.      ); end and
  9.    (if
  10.      (and
  11. (setq cTxt(nentsel "\nPick Text, MText or Attribute to insert field > "))
  12. (vlax-property-available-p
  13.   (setq vTxt(vlax-ename->vla-object(car cTxt))) 'TextString)
  14. ); end and
  15.      (progn
  16.      (vla-put-TextString vTxt
  17. (strcat "%<\\AcObjProp Object(%<\\_ObjId "
  18.         (itoa(vla-get-ObjectID vObj)) ">%).Area \\f "%lu2%pr1%ps%ct8[1e-006]">%"))
  19.       ); end progn
  20.      ); end if
  21.    ); end if
  22. (princ)
  23. ); end of c:arfield
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 00:15:37 | 显示全部楼层
您可以在字段中使用公式:
  1. (strcat "%<\\AcExpr (0.5*round(%<\\AcObjProp Object(%<\\_ObjId "
  2.                (itoa(vla-get-ObjectID vObj))
  3.                ">%).Area>%" "*1e-6/0.5)) \\f "%lu2%pr1">%")
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:20:05 | 显示全部楼层
 
为了解决这个问题,我试图使用格式设置为0的嵌套字段来实现舍入(但嵌套字段的格式似乎没有传递到父字段)-我没有意识到“round”在公式字段中是有效的运算符,谢谢Stefan
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:33:58 | 显示全部楼层
以下是我的数字舍入函数。。。前2组合用于将以0或5(0,5,10,15,20,…)结尾的第一个最近数上的任何数字四舍五入
 
我的最后一个函数(d轮)是您实际需要的函数。。。只需提供您想要舍入的数字,对于舍入格式的小数,您提供0.5。。。
 
  1. (defun fixx ( n / remi r )
  2. (setq remi (- n (fix n)))
  3. (if (< remi 0.5) (setq r (fix n)))
  4. (if (>= remi 0.5) (setq r (+ (fix n) 1)))
  5. r
  6. )
  7. (defun round ( n / ldig r )
  8. (setq ldig (- n (* (fix (/ n 10.0)) 10)))
  9. (if (< -0.5 ldig 3) (setq r (* (fix (/ n 10.0)) 10)))
  10. (if (< 2 ldig  (setq r (+ (* (fix (/ n 10.0)) 10) 5)))
  11. (if (< 7 ldig 9.5) (setq r (+ (* (fix (/ n 10.0)) 10) 10)))
  12. r
  13. )
  14. (round 7.2) => 10
  15. (round 7.3) => 10
  16. (round 7.5) => 10
  17. (round 7.7) => 10
  18. (round 7. => 10
  19. (fixx 7.2) => 7
  20. (fixx 7.3) => 7
  21. (fixx 7.5) => 8
  22. (fixx 7.7) => 8
  23. (fixx 7. => 8
  24. (round (fixx 7.2)) => 5
  25. (round (fixx 7.3)) => 5
  26. (round (fixx 7.5)) => 10
  27. (round (fixx 7.7)) => 10
  28. (round (fixx 7.) => 10
  29. (defun _round ( n d )
  30. (if (< (- n (* (fix (/ n d)) d)) (/ d 2.0))
  31.    (* (fix (/ n d)) d)
  32.    (* (+ 1.0 (fix (/ n d))) d)
  33. )
  34. )
  35. (_round 7.2 0.5) => 7.0
  36. (_round 7.3 0.5) => 7.5
  37. (_round 7.5 0.5) => 7.5
  38. (_round 7.7 0.5) => 7.5
  39. (_round 7.8 0.5) => 8.0

 
虽然你已经有了一个案例(代码)的答案,也许你会发现这些也很有用。。。
 
M、 R。
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 00:47:37 | 显示全部楼层
那也是我第一次尝试。 
不客气,李。以下是字段和表格公式中可用的其他函数列表。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:52:53 | 显示全部楼层
 
太好了,谢谢
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 01:08:00 | 显示全部楼层
非常感谢你。
很有魅力!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 21:37 , Processed in 0.440632 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表