第十五章 Caché 函数大全 $FACTOR 函数

文章目录

第十五章 Caché 函数大全 $FACTOR 函数

将整数转换为$BIT位字符串。

大纲

$FACTOR(num,scale)

参数

  • num 计算结果为数字的表达式。 num在位串转换之前转换为正整数。负数将转换为正数(其绝对值)。小数舍入为整数。
  • scale 可选-整数,用作整数的十进制幂(科学计数法)乘数。默认值为0。

描述

$FACTOR返回与提供的整数的二进制表示形式相对应的$BIT格式位串。它执行以下操作:

  • 如果指定负数,则$FACTOR取数字的绝对值。
  • 如果指定小数位数,则$FACTOR将整数乘以10 **小数位数。
  • 如果指定小数,则$FACTOR会将其四舍五入为整数。四舍五入时,Caché将小数.5舍入到下一个最大整数。
  • $FACTOR将整数转换为其二进制表示形式。
  • $FACTOR将此二进制数转换为$BIT编码的二进制格式。

返回的二进制字符串指定从位置1(位置1的位置)的最低有效位开始的位位置。这对应于各种$BIT函数使用的位串。

参数

num

数字(或计算结果为数字的表达式)。$factor应用Scale参数(如果提供),通过四舍五入将此数字转换为整数,然后返回相应的位串。Num可以是正数,也可以是负数。如果num是混合数字字符串(例如“7wwarves”或“5.6.8”),$factor将转换字符串的数字部分(在我们的示例中为75.6),直到遇到非数字字符。如果num为零、四舍五入为零、空字符串(“”)或非数字字符串,则$factor返回空字符串。$DOUBLEINF-INFNaN返回空字符串。

scale

一个整数,它指定要应用于Num的科学计数法指数。例如,如果比例为2,则比例表示10指数2或100。该比例值乘以Num。例如,$factor(7,2)返回与整数700对应的位串。此乘法是在将num舍入为整数之前完成的。默认情况下,比例为0。

示例

下面的示例显示了从整数1到9到位串的转换:

/// d ##class(PHA.TEST.Function).FACTOR()
ClassMethod FACTOR()
{
    
    
	SET x=1
	WHILE x<10 {
    
    
	WRITE !,x,"="
		FOR i=1:1:8 {
    
    
			WRITE $BIT($FACTOR(x),i) 
		}
		SET x=x+1 
	}
}
DHC-APP>d ##class(PHA.TEST.Function).FACTOR()
 
1=10000000
2=01000000
3=11000000
4=00100000
5=10100000
6=01100000
7=11100000
8=00010000
9=10010000

下面的示例显示$FACTOR将负数和小数转换为正整数:

/// d ##class(PHA.TEST.Function).FACTOR1()
ClassMethod FACTOR1()
{
    
    
	FOR i=1:1:8 {
    
    WRITE $BIT($FACTOR(17),i)}
	WRITE " 正整数",!
	FOR i=1:1:8 {
    
    WRITE $BIT($FACTOR(-17),i)}
	WRITE " 负整数 (绝对值)",!
	FOR i=1:1:8 {
    
    WRITE $BIT($FACTOR(16.5),i)}
	WRITE " 正小数(四舍五入)",!
	FOR i=1:1:8 {
    
    WRITE $BIT($FACTOR(-16.5),i)}
	WRITE " 负小数(四舍五入)",!
	FOR i=1:1:8 {
    
    WRITE $BIT($FACTOR(-16.4),i)}
	WRITE " 负小数(四舍五入)"
}
DHC-APP>d ##class(PHA.TEST.Function).FACTOR1()
10001000 正整数
10001000 负整数 (绝对值)
10001000 正小数(四舍五入)
10001000 负小数(四舍五入)
00001000 负小数(四舍五入)

以下示例显示了在指定scale参数时返回的位串:

/// d ##class(PHA.TEST.Function).FACTOR2()
ClassMethod FACTOR2()
{
    
    
	SET x=2.7
	WRITE !,x," scaled then rounded to an integer:",!!
	FOR i=1:1:12 {
    
    
		WRITE $BIT($FACTOR(x),i) 
	}
	WRITE " binary = ",$NORMALIZE(x,0)," decimal",!
	SET scale=1
	SET y=x*(10**scale)
	FOR i=1:1:12 {
    
    
		WRITE $BIT($FACTOR(x,scale),i) 
	}
	WRITE " binary = ",$NORMALIZE(y,0)," decimal",!
	SET scale=2
	SET y=x*(10**scale)
	FOR i=1:1:12 {
    
    
		WRITE $BIT($FACTOR(x,scale),i) 
	}
	WRITE " binary = ",$NORMALIZE(y,0)," decimal"
}
DHC-APP>d ##class(PHA.TEST.Function).FACTOR2()
 
2.7 scaled then rounded to an integer:
 
110000000000 binary = 3 decimal
110110000000 binary = 27 decimal
011100001000 binary = 270 decimal

猜你喜欢

转载自blog.csdn.net/yaoxin521123/article/details/108417182