点击或拖拽改变大小

Functions.Str 方法

X#
将数值表达式转换为字符串。

命名空间:  XSharp.RT
程序集:  XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法
 FUNCTION Str(
	nNumber,
	nLength,
	nDecimals
) AS STRING CLIPPER
查看代码

参数

nNumber (Optional)
类型:__Usual
要转换为字符串的数值表达式。
nLength (Optional)
类型:__Usual
要返回的字符串长度,包括小数位、小数点和符号。
值为 -1 表示禁止任何右侧填充。但是,小数位仍然根据 nDecimals 指定的数量返回。
如果未指定 nLength,则由 SetDigit() 和 SetDigitFixed() 决定返回的数字位数。
nDecimals (Optional)
类型:__Usual
返回值中的小数位数。
值为 -1 表示仅返回小数点右侧的有效数字(见下例)。
返回值中的整数位数仍由 nLength 参数决定。
如果未指定 nDecimals,则由 SetDecimal() 和 SetFixed() 决定返回的小数位数。
小数点的表示由 SetDecimalSep() 的当前设置决定。

返回值

类型:String
一个字符串,具有以下例外: 如果 nNumber 是产生数值溢出的表达式,则会产生运行时错误,该错误可以通过当前安装的错误处理程序处理。错误处理程序返回 "+INF" 或 "-INF",表示最大可能的浮点数。
如果 nLength 小于 nNumber 中的整数位数,则结果将以科学计数法返回。
如果科学计数法的结果不适合,则返回一系列星号。 取整由以下内容决定: 如果 nLength 小于返回字符串的小数部分所需的小数位数,则返回值四舍五入到可用的小数位数。 如果指定了 nLength,但省略了 nDecimals(没有小数位),则返回值四舍五入为整数。 如果未指定 nLengthnDecimals,则它们将从 FLOAT 内部浮点格式中获取,或者从 SetDigit() 中获取,如果内部数字位数为 0。
如果 SetFixed() 或 SetDigitFixed() 为 TRUE,则这些值将被 SetDecimal() 或 SetDigit() 的值覆盖。 如果 SetScience() 为 TRUE,则返回值将以科学计数法返回。此外,如果 SetDigit() 指定的数字小于 nNumber 的整数位数,并且 SetDigitFixed() 设置为 TRUE,则结果将以科学计数法返回。但如果科学计数法不适合,则结果是一系列星号。
备注
Str() 通常用于将数字连接到字符串。因此,它对于根据数字创建项的代码(例如,部件编号)以及创建结合数值和字符数据的订单键非常有用。 Str() 类似于 Transform(),它使用掩码而不是长度和小数规格来格式化数字为字符串。 Str() 的逆函数是 Val(),它将格式为字符串的数字转换为数值。
示例
这些示例演示了 Str() 返回值范围,具体取决于指定的参数:
X#
 1nNumber := 123.45
 2? Str(nNumber)                            //      123.45
 3? Str(nNumber, 4)                        // 123.
 4? Str(nNumber, 2)                        // **
 5? Str(nNumber * 10, 7, 2)                    // 1234.50
 6? Str(nNumber * 10, 12, 4)                //    1234.5000
 7? Str(nNumber, 10, 1)                    //      123.5
 8? Str(123.45, -1)                    // 123.45
 9? Str(123.45, -1, 2)                    // 123.45
10? Str(0.45000, 12, -1)                    //      0.45000
通常两个数字显示相同的结果,但它们内部存储的值不同。因此,等式测试将失败(返回 FALSE),除非您对每一侧进行四舍五入。以下是一个示例:
X#
 1? nNum
 2// 显示与下面的 MyFunction() 相同
 3? MyFunction()
 4// 显示与上面的 nNum 相同
 5// 但内部不相等
 6? nNum = MyFunction()                    // FALSE
 7// 在四舍五入后它们相等
 8? Round(nNum, 0) == Round(MyFunction(), 0)    // TRUE
 9// Val(Str()) 也是四舍五入
10? Val(Str(nNum)) = Val(Str(MyFunction()))        // TRUE
将 SetFloatDelta() 设置为比之前更高的值也具有相同效果:
X#
1SetFloatDelta(0.1)
2? nNum == MyFunction()                    // TRUE
当 Decimals 参数 > 0 且 Decimals 参数 > Length-2 时,此函数返回一串星号。 如果数字不适合分配的空间,也会返回一串星号。 示例:
X#
1? Str(9,6,6)    => "******"
2? Str(9,6,5)    => "******"
3? Str(9,6,4)    => "9.0000"
4? Str(9,6,3)    => " 9.000"
5? Str(10,6,6)    => "******"
6? Str(10,6,5)    => "******"
7? Str(10,6,4)    => "******"
8? Str(10,6,3)    => "10.000"
此示例使用 Str() 创建具有复合键的订单,键由订单号和客户名称组成:
X#
1USE customer NEW
2INDEX ON Str(NumOrders, 9) + Custname TO custord
参见