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