温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
isnumber函数
2023
isnumber
函数
用法
实例
【isnumber函数】ISNUMBER函数的用法实例
篇一:别误用IsDigit与IsNumber函数
需要推断Char是否为数字,查看了下MSDN,觉察有三种方法:
Char.IsDigit (aChar) 指示指定字符串中位于指定位置处的字符是否属于十进制数字类别
Char.IsNumber(aChar) 指示指定字符串中位于指定位置的字符是否属于数字类别
aChar=0aCharlt;=9 推断aChar是否位于‘0’到‘9’之前 等同于第一种
用.NET Reflector 查看事实上现代码:
1. {
2. if (!IsLatin1(c))
3. {
4.return CheckNumber(CharUnicodeInfo.GetUnicodeCategory(c));
5. }
6. if (!IsAscii(c))
7. {
8.return CheckNumber(GetLatin1UnicodeCategory(c));
9. }
10. return ((c = 0) (c lt;= 9));
11. }
1. {
2. if (!IsLatin1(c))
3. {
4.return (CharUnicodeInfo.GetUnicodeCategory(c) ==
5. nicodeCategory.DecimalDigitNumber);
6. }
7. return ((c = 0) (c lt;= 9));
8. }
篇二:别误用IsDigit与IsNumber函数
别误用IsDigit与IsNumber函数
1、起因
最近觉察程序中有一段操纵TextBox数字输入的代码,相信大家都不会太陌生,如下: void int_KeyPress(object sender, KeyPressEventArgs e){
const char Delete = (char)8;
if (!Char.IsDigit(e.KeyChar) e.KeyChar != Delete) {
andled = true;
}
}
乍一看,好似没有啥征询题,但是却出现了一个bug,可以输入全角的数字,如:0、1、2、3等。错误的根源确实是上面代码中用到的IsDigit函数,因此就有了下面的一番探究,让我们来看看IsDigit函数的真面目。
2、IsDigit函数
查阅MSDN,告知该函数是推断字符是Unicode的十进制数字的函数。在查看其源代码 public static bool IsDigit(char c)
{
if (!IsLatin1(c)) return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
return c = 0 c lt;= 9;
}
第一行的IsLatin1函数是推断字符是0~255的函数,而全角的0、1、2、3等的Unicode编码不在这个范围,因此就执行了下面这句代码:
CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
而关于Unicode的分类中,半角的1,2,3和全角的0、1、2、3等都被归为了DecimalDigitNumber,因此关于全角的数字,这个函数返回了true。
还有一个函数IsNumber和IsDigit功能类似,我们是否可以用它来代替呢?看下面的分析
3、IsNumber函数又是何物?
先看看这个函数的定义
public static bool IsNumber(char c)
{
if (!IsLatin1(c)) return CheckNumber(CharUnicodeInfo.GetUnicodeCategory(c));
if (!IsAscii(c)) return CheckNumber(GetLatin1UnicodeCategory(c)); return c = 0 c lt;= 9;
}
internal static bool CheckNumber(UnicodeCategory uc)
{
switch (uc)
{
case UnicodeCategory.DecimalDigitNumber:
tterNumber:
case UnicodeCategory.OtherNumber:
return true;
}
return false;
}
和IsDigit函数相比有3点区别:
3)多了一个IsAscii的推断(0~127)
特别显然IsNumber的范围更广了。下面列举几种IsNumber认为是数字的字符 UnicodeCategory.LetterNumber:Ⅰ、Ⅱ、Ⅲ
UnicodeCategory.OtherNumber:①、②、③
128~255中有哪些字符会被IsNumber认为是数字,有兴趣的可以本人去测试。
测试的方法可以利用这个函数:System.Globalization.CharUnicodeInfo.GetUnicodeCategory(char c) ,返回的是一个UnicodeCategory类型,你可以看看是不是IsNumber的几个类型就明白了。
4、结论
搞明晰了上面这两个函数的内部实现,那么在推断是否是ASCII数字(0~9)的时候,我们就需要留意以下几点了。
1)不能用IsDigit和IsNumber函数推断是否是ASCII数字,这两个函数都有可能把ASCII以外的某些字符当做是数字。
2)尽量用这种方式推断: c = 0 c lt;= 9(因此也可以用正那么表达式)。
3)数字推断的严格性,从严到松依次是:
c = 0 c lt;= 9 IsDigit IsNumber
4)修正上面的bug函数作为完毕
void int_KeyPress(object sender, KeyPressEventArgs e)
{
const char Delete = (char)8;
r lt;= 9) e.KeyChar != Delete)
{
e.Handled = true;
}
}
篇三:excel函数使用实例20230211
Excel函数使用实例
唱润刚
1 快捷输入
ALT+178 (M2),ALT+179(M3)
Alt+10(代表excel中alt+enter)
示成0.1)或整数位(0.9999999会显示成1)。
在自动选择时,会按实际数据进展大小比照,比方,0.0999999,中选择条件为大于等于0.1时,这个数据无法被选择出来,按0.0999999lt;0.1对待。
3 援用单元格的各种方法比照
1) Indirect(ref_text,[a1])
[]内参数可以省略
函数只有一个参数(该参数可以再套用其他函数),该参数必须符合单元格表达法,因此函数的合法参数,必须同时含有列号(A、B、C、D等字母)和行号(1、2、3、4等数字)。详细参见以下三种方式;
前两种方式中,我们假设A1单元格的数据是e2,而E2单元格的数据是250。
(1) 简单援用,使用Indirect(a1);
该公式的返回值是250。
Indirect函数内的参数,最终结果只接受文本格式,假设参数是这种a1的援用格式,会先将该援用进展计算,所得的值再作为indirect的参数,也确实是说,该援用单元格内的数据必须是一个类似“a1〞、“b2〞等这种款式的文本,否那么的话,最后indirect函数会返回错误值。
顺便说一下,由于这里a1是个变量,因此当公式向左右或上下拖拉时,会自动改变,因此当需要固定参数的时候,需使用$a$1,即Indirect($a$1)。
(2) 列号和行号同时为文本时,使用Indirect(“a1〞)
该公式的返回值是e2,而并非E2单元格内的数值。
(3) 以上两种方式的混合方式,列号和行号不同时为文本时,使用连字符对列号和
行号进展连接;
比方一个是文本一个为援用(或函数),或者两者都是援用(或函数),可以用连字符,
连接列号和行号,如〞a〞b1;〞a〞row();a1〞2〞;a1row()。
如:需要援用a1的值,那么为=indirect(“a1〞),假设需要使用a1单元格内的内容作为参数,那么=indirect(a1a2),其中,a1中应为a、b等字母,a2中应为数字,比方a1为c,a2为2,c2为500,那么=indirect(a1a2)返回值是500。
2) Index(array,row_num,[column_num]),Index(reference,row_num,[column_num],[area_num])
留意[]里的参数在某种条件下是可以省略的。
该函数有两种用法:
第一种是array参数给出一个区域,然后row_num给出行号,column_num给出列号,假设array参数提供的区域只有一列,那么该参数可以省略。
留意这里的行号和列号都是相关于给定区域而言的,都是相对援用。
=index(a:a,1)表示a1单元格。
=index(1:1,2)表示b1单元格。
=index(a:c,3,2)表示b3单元格。
其中a:a表示第一整列,也确实是A整列,1:1表示第一整行,以此类推比方b:b,a:c,2:2,1:3等等。 第二种,Reference对一个或多个单元格区域的援用,格式为:(A1:B4,D1:E4,G1:H4),留意这里括号不能忘,然后利用area_num参数表示需要返回的区域数,用1、2、3等数字表示。
比方:=INDEX((A2:C8,A11:C14),3,2,2),最后返回的是第二个区域第二列第三行的数据,也确实是B13的值,属于相对行号和列号。
3) Address(row_num,column_num,abs_num,[a1],[sheet_text])
第一个参数表示行号,第二个参数表示列号,第三个可以省略,默认为绝对援用,也确实是第一、二两个参数表示的是绝对单元格的行号和列号。最后两个参数通常下省略。
abs_num:1或省略,绝对援用;2 绝对行号,相对列标;3 相对行号,绝对列标;4 相对援用
这里需要留意的是,address返回的是一个单元格表示,而不是该单元格的值,这和indirect函数恰好相反。比方=ADDRESS(1,1),它的返回结果是a1单元格的表示:$A$1,而并不是a1单元格的值。
按照第三个参数的改变,返回值可以如下变化:
=ADDRESS(1,2,2),它的返回值是B$1;
=ADDRESS(1,2,3),它的返回值是$B1;
=ADDRESS(1,2,4),它的返回值是B1;
indirect可以返回单一的单元格,没有数组功能
index函数的行号和列号是相关于援用范围而言的
address利用列号和行号就可以援用某个单元格,默认情况下,这里的行号和列号是相关于整个表格的 4 交换掉单元格内空格
1) 保存两个符号中间的一个,去掉前后的所有空格。
由于在trim公式中,两个字符之间有一个空格的ASCII码值为160,而其他一般空格是32。
=trim()。
2) 交换掉单元格内所有空格
=clean(substitute(a1,char(32),char(7)))
需使用substitute函数,先交换出里面的保存空格。
char(32)一般空格
char(160)特别空格
CLEAN 函数被为删除文本中7位ASCII码的前32个非打印字符(值