收藏 分享(赏)

2023年【isnumber函数】ISNUMBER函数的用法实例.docx

上传人:g****t 文档编号:1467234 上传时间:2023-04-20 格式:DOCX 页数:7 大小:14.03KB
下载 相关 举报
2023年【isnumber函数】ISNUMBER函数的用法实例.docx_第1页
第1页 / 共7页
2023年【isnumber函数】ISNUMBER函数的用法实例.docx_第2页
第2页 / 共7页
2023年【isnumber函数】ISNUMBER函数的用法实例.docx_第3页
第3页 / 共7页
2023年【isnumber函数】ISNUMBER函数的用法实例.docx_第4页
第4页 / 共7页
2023年【isnumber函数】ISNUMBER函数的用法实例.docx_第5页
第5页 / 共7页
2023年【isnumber函数】ISNUMBER函数的用法实例.docx_第6页
第6页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、【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(CharUnicod

2、eInfo.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与I

3、sNumber函数别误用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,可以输入全角的数字,如:、等。错误的根源确实是上面代码中用到的IsDigit函数,因此就有了下面的一番探究,

4、让我们来看看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函数是推断字符是0255的函数,而全角的、等的Unicode编码不在这个范围,因此就执行了下面这句代码:CharUni

5、codeInfo.GetUnicodeCategory(c) = UnicodeCategory.DecimalDigitNumber;而关于Unicode的分类中,半角的1,2,3和全角的、等都被归为了DecimalDigitNumber,因此关于全角的数字,这个函数返回了true。还有一个函数IsNumber和IsDigit功能类似,我们是否可以用它来代替呢?看下面的分析3、IsNumber函数又是何物?先看看这个函数的定义public static bool IsNumber(char c)if (!IsLatin1(c) return CheckNumber(CharUnicodeIn

6、fo.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点区别

7、:3)多了一个IsAscii的推断(0127)特别显然IsNumber的范围更广了。下面列举几种IsNumber认为是数字的字符 UnicodeCategory.LetterNumber:、UnicodeCategory.OtherNumber:、128255中有哪些字符会被IsNumber认为是数字,有兴趣的可以本人去测试。测试的方法可以利用这个函数:System.Globalization.CharUnicodeInfo.GetUnicodeCategory(char c) ,返回的是一个UnicodeCategory类型,你可以看看是不是IsNumber的几个类型就明白了。4、结论搞明晰

8、了上面这两个函数的内部实现,那么在推断是否是ASCII数字(09)的时候,我们就需要留意以下几点了。1)不能用IsDigit和IsNumber函数推断是否是ASCII数字,这两个函数都有可能把ASCII以外的某些字符当做是数字。2)尽量用这种方式推断: c = 0 c lt;= 9(因此也可以用正那么表达式)。3)数字推断的严格性,从严到松依次是:c = 0 c lt;= 9 IsDigit IsNumber4)修正上面的bug函数作为完毕void int_KeyPress(object sender, KeyPressEventArgs e)const char Delete = (char

9、)8;r lt;= 9) e.KeyChar != Delete)e.Handled = true;篇三:excel函数使用实例20230211Excel函数使用实例唱润刚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)内参数可以省略函数只有一个参数

10、(该参数可以再套用其他函数),该参数必须符合单元格表达法,因此函数的合法参数,必须同时含有列号(A、B、C、D等字母)和行号(1、2、3、4等数字)。详细参见以下三种方式;前两种方式中,我们假设A1单元格的数据是e2,而E2单元格的数据是250。(1) 简单援用,使用Indirect(a1);该公式的返回值是250。Indirect函数内的参数,最终结果只接受文本格式,假设参数是这种a1的援用格式,会先将该援用进展计算,所得的值再作为indirect的参数,也确实是说,该援用单元格内的数据必须是一个类似“a1、“b2等这种款式的文本,否那么的话,最后indirect函数会返回错误值。顺便说一下

11、,由于这里a1是个变量,因此当公式向左右或上下拖拉时,会自动改变,因此当需要固定参数的时候,需使用$a$1,即Indirect($a$1)。(2) 列号和行号同时为文本时,使用Indirect(“a1)该公式的返回值是e2,而并非E2单元格内的数值。(3) 以上两种方式的混合方式,列号和行号不同时为文本时,使用连字符对列号和行号进展连接;比方一个是文本一个为援用(或函数),或者两者都是援用(或函数),可以用连字符,连接列号和行号,如ab1;arow();a12;a1row()。如:需要援用a1的值,那么为=indirect(“a1),假设需要使用a1单元格内的内容作为参数,那么=indirec

12、t(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

13、)表示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,c

14、olumn_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),它的返

15、回值是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个非打印字符(值

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 资格与职业考试 > 其它

copyright@ 2008-2023 wnwk.com网站版权所有

经营许可证编号:浙ICP备2024059924号-2