找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 547|回复: 7

[已解决] 【已解决】如何将字符串中的表示整数的数字字符变成实数

[复制链接]
发表于 2018-6-9 15:45:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 wdmzslw 于 2018-6-21 23:56 编辑

在一个算式表达式的字符串中,有字母、数字,运算符号,如何将其中表示整数的部分在末端追加一个“.0“转化为实数。例如:12*sqrt(8)+33.5*9*75.5,变成12.0*sqrt(8.0)+33.5*9.0*75.5。这样转化的原因是调用你cal计算表达式时,整数部分超过一定范围就会出错,或者高手们有别的思路
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-6-9 15:55:51 | 显示全部楼层
首先,一个表达式的结果是整数还是实数,是所有的都是整数的时候,结果才是整数,你这个12*sqrt(8) , 结果是实数的,不会出现你说的整数溢出,只有"444444*3333333" 这样的才会。

另外,你的这个12*sqrt(8)+33.5*9*75.5 是你自己构建的吧,你构建的时候,就把整数转成实数啊,用rtos

点评

marting老师你说的对,但是有不知道这个问题的人输入的时候就可能出现这个问题  详情 回复 发表于 2018-6-9 16:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-9 16:18:40 | 显示全部楼层
marting 发表于 2018-6-9 15:55
首先,一个表达式的结果是整数还是实数,是所有的都是整数的时候,结果才是整数,你这个12*sqrt(8) , 结果 ...

marting老师你说的对,但是有不知道这个问题的人输入的时候就可能出现这个问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-6-9 16:30:01 | 显示全部楼层
本帖最后由 marting 于 2018-6-9 16:31 编辑

1、智能点,你判断ODCL的字符输入变化事件,如果最后一个输入 * )等符号时候,你判断这个之前的数字是否是整数,如果是,对话框符号前自动给填0,这样你永远判断是最后一个输入的数字是否是整数。 标点符号你别让用户去输,你给按钮,防止用户输入你不支持的操作去看看晓东工具箱的数字公式替换,公式那个地方是程序去输入的,别让用户去输入。

搜狗截图20180609162750.png


2、如果最后替换,凡是字符串处理的,你要想到的第一件事就是,正则表达式,开源函数库现成的 xd::string:regexps、xd::string:regexpr 和 XDRX API的 xdrx_string_regexps,xdrx_string_regexpr

S是查找,R是替换

(setq a "12*sqrt(8)+33.5*9*75.5*34")
(xdrx_string_regexps "(?<=(^|\\(|\\*))\\d+(?=(\\)|\\*|$)" a "") ==》("12" "8" "9" "34")

(xdrx_string_regexpr "(?<=(^|\\(|\\*))\\d+(?=(\\)|\\*|$)" a "$0.0") ==》"12.0*sqrt(8.0)+33.5*9.0*75.5*34.0"

点评

谢谢marting老师的热心指导!!!  详情 回复 发表于 2018-6-9 20:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2018-6-9 16:31:37 | 显示全部楼层
很久不动Lisp了,现在也写不出什么,不过我的Ca.lsp(网络U盘有)中就有类似的处理,大体是判断是整数就加“.0”,但关键是,在算式构成的时候,就像marting所说的那样,先对每个数字进行处理,否,对一个完整的算式进行处理会很麻烦,最后也还是分解了再合成。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-9 20:12:45 | 显示全部楼层
marting 发表于 2018-6-9 16:30
1、智能点,你判断ODCL的字符输入变化事件,如果最后一个输入 * )等符号时候,你判断这个之前的数字是否是 ...

谢谢marting老师的热心指导!!!

点评

数据的合法性,要在对话框交互的时候去解决掉,保不齐用户会输入 3..33这样的  详情 回复 发表于 2018-6-10 01:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-10 01:11:51 | 显示全部楼层
wdmzslw 发表于 2018-6-9 20:12
谢谢marting老师的热心指导!!!

数据的合法性,要在对话框交互的时候去解决掉,保不齐用户会输入 3..33这样的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2018-6-10 01:12:48 | 显示全部楼层
说得有道理。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-29 06:04 , Processed in 0.374502 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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