|
分享源码
界面截图: |
|
是否带模块: |
- |
备注说明: |
- |
【思路学习向】将数值转为科学计数法
(PS:已封入懒人模块)
啰嗦:
本贴全贴可能就只提到了一个子程序————数值_科学计数法:将一串数值转为科学计数法
那我为什么要单发贴呢?
绝对绝对不是(是)为了水贴,只是很单纯(有想法)的想给大家分享一下实现思路,因为做的过程中感觉这个算法真的很值得学习
示例:
讲解:
(PS:第一次尝试讲解思路,讲的不好请见谅)
(分类讨论):
首先,我们需要知道,将数值转换为科学计数法时,有几种可能
1.数值无需过多操作,本身已经满足科学计数法=》a.b
2.数值本身就是整数,无需科学计数法=》a
3.数值的整数部分是0,科学计数法为=》a.bbbb * 10^-n
4.一般情况,科学计数法为=》a.bbbbb * 10^n
OK,开始之前我们先对需要的数据进行简单的处理
接下来,对每一种可能进行单独处理
(第一种情况下): 判断方法:整数部分长度为1,并且整数部分不为”0“
直接返回
(第二种情况下):判断方法:整数部分取值失败,为“”
直接返回
(第三种情况下):判断方法:整数部分为0
我们可以先取到小数部分,然后通过判断循环来删除开头的所有0,直到删干净为止,每次删除记录一次
每次记录,代表原值 * 10^-1 ,再算上刚开始取小数部分时也相当于* 10^-1,所以最后的n=计次+1,
然后n需要为次数的相反数,则n=0-n,整理 n = 0 - 计次 - 1
(第四种情况下):判断方法:万能的排除法
n=整数部分的长度减去一个
综上:
接下来就比较简单了,已经有了n,那我们可以不管不顾,直接把 abbbbb.b 转换成 a.bbbbbbb 就好
但是,当传入的数据为a.b时,这样去操作就会发现,返回值为 a.
所以我们需要单独判断单独处理
文_数值 = 子文本替换 (文_数值, “.”, “”, , , 真) 文_数值 = 文本_取索引_LR (文_数值, 1, 2 ) + “.” + 文本_删除_索引_LR (文_数值, 1, 2 )如果真 (文本_取右边 (文_数值, “.”, , ) = “”) 文_数值 = 子文本替换 (文_数值, “.”, “”, , , 真)
至此,我们只是处理了整数部分,接下来是 * 10^n ,n已经得到,剩下的不必多说
如果 (n = 1 )文_数值 = 文_数值 + #乘 + “10”如果真 (n ≠ 0 )文_数值 = 文_数值 + #乘 + “10^” + 到文本 (n )
完整源码:
变量名 | 类 型 | 静态 | 数组 | 备 注 | 文_数值 | 文本型 | | | 局_整数部分 | 文本型 | | | n | 整数型 | | | 计次 | 整数型 | | |
文_数值 = 到文本 (数值 )局_整数部分 = 文本_取左边 (文_数值, “.”, , ) 判断 (文本_取长度_LR (局_整数部分 ) = 1 且 局_整数部分 ≠ “0”) 返回 (文_数值 )判断 (局_整数部分 = “”) 局_整数部分 = 文_数值 n = 0 判断 (局_整数部分 = “0”) 文_数值 = 子文本替换 (文_数值, “0.”, , , , 真) 判断循环首 (文本_取索引_LR (文_数值, 1, 2 ) = “0”) 计次 = 计次 + 1 文_数值 = 文本_删除首个_LR (文_数值, “0”, )判断循环尾 ()n = 0 - 计次 - 1 n = 文本_取长度_LR (局_整数部分 ) - 1 文_数值 = 子文本替换 (文_数值, “.”, “”, , , 真) 文_数值 = 文本_取索引_LR (文_数值, 1, 2 ) + “.” + 文本_删除_索引_LR (文_数值, 1, 2 )如果真 (文本_取右边 (文_数值, “.”, , ) = “”) 文_数值 = 子文本替换 (文_数值, “.”, “”, , , 真) 如果 (n = 1 )文_数值 = 文_数值 + #乘 + “10”如果真 (n ≠ 0 )文_数值 = 文_数值 + #乘 + “10^” + 到文本 (n )返回 (文_数值 )
|
|