找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 19019|回复: 3
打印 上一主题 下一主题

[分享] 实数转字符串的通用方法

[复制链接]
跳转到指定楼层
1
发表于 2008-8-14 11:04:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
以前找过一些类似的方法,但通用性和灵活性都差强人意。因此花了一些时间总结了一个比较通用的关系式,应用该关系式可以将任意实数X转换为字符串Y,保留的小数位N可以随意改变,并且自动进行四舍五入的处理。
例如:
1.输入X=0.998,N=2,则输出Y="1.00"
2.输入X=-0.32589,N=3,则输出Y="-0.326"
3.输入X=125.4457,N=1,则输出Y="125.4"
等等

关系式如下:
IF X >= 0
FIRST_STRING = ITOS(FLOOR(FLOOR(X * 10 ^ N + 0.5) / (10 ^ N)))
IF FIRST_STRING != ""
  X_STR = ITOS(FLOOR(X * 10 ^ N + 0.5))
  X_LENGTH = STRING_LENGTH(X_STR)
  Y = EXTRACT(X_STR,1,X_LENGTH - N) + "." + EXTRACT(X_STR,X_LENGTH - N + 1,N)
ELSE
  X_STR = ITOS(FLOOR((X + 1) * 10 ^ N + 0.5))
  X_LENGTH = STRING_LENGTH(X_STR)
  Y = "0." + EXTRACT(X_STR,X_LENGTH - N + 1,N)
ENDIF
ELSE
FIRST_STRING = ITOS(FLOOR(FLOOR((ABS(X) + 1) * 10 ^ N + 0.5) / (10 ^ N) - 1))
IF FIRST_STRING != ""
  X_STR = ITOS(FLOOR(ABS(X) * 10 ^ N + 0.5))
  X_LENGTH = STRING_LENGTH(X_STR)
  Y = "-" + EXTRACT(X_STR,1,X_LENGTH - N) + "." + EXTRACT(X_STR,X_LENGTH - N + 1,N)
ELSE
  X_STR = ITOS(FLOOR((ABS(X) + 1) * 10 ^ N + 0.5))
  X_LENGTH = STRING_LENGTH(X_STR)
  Y = "-" + "0." + EXTRACT(X_STR,X_LENGTH - N + 1,N)
ENDIF
ENDIF

该关系未经过严格的测试,希望各位专家提出改进意见!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2008-8-14 13:58:29 | 只看该作者

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
3
 楼主| 发表于 2008-8-15 11:48:42 | 只看该作者

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
4
发表于 2017-5-12 00:09:40 | 只看该作者

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-11-29 07:58 , Processed in 0.023565 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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