iCAx开思网
标题:
实数转字符串的通用方法
[打印本页]
作者:
just_go
时间:
2008-8-14 11:04
标题:
实数转字符串的通用方法
以前找过一些类似的方法,但通用性和灵活性都差强人意。因此花了一些时间总结了一个比较通用的关系式,应用该关系式可以将任意实数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
该关系未经过严格的测试,希望各位专家提出改进意见!
作者:
ss_sand
时间:
2008-8-14 13:58
顶
作者:
just_go
时间:
2008-8-15 11:48
多谢版主支持!
作者:
大象归来
时间:
2017-5-12 00:09
高手啊,赞赞
欢迎光临 iCAx开思网 (https://www.icax.org/)
Powered by Discuz! X3.3