[C#]简单快速将各种数值字数转成数字(string to int)

[C#]简单快速将各种数值字数转成数字(string to int),第1张

概述相信大家在写程序的时候,一定有非常多的机会要将数值字数(numeric string)转成 int 或 float类型的值,但数值字数可能不是很干净,有时还会有千分位、货币符号、前后有空白、甚至不是10进制,这样转换就有点累,像千分位或货币符号以前我是用 Replace 将 , $ 等符号删除后再转换,但如果你是使用.Net Framework 2.0 以上其实就不用那么麻烦,内建就有功能帮你处理

相信大家在写程序的时候,一定有非常多的机会要将数值字数(numeric string)转成 int 或 float类型的值,但数值字数可能不是很干净,有时还会有千分位、货币符号、前后有空白、甚至不是10进制,这样转换就有点累,像千分位或货币符号以前我是用 Replace 将,$ 等符号删除后再转换,但如果你是使用.Net Framework 2.0 以上其实就不用那么麻烦,内建就有功能帮你处理这些杂七杂八的东西,让我们来看看怎么做吧。


相信大家在写程序的时候,一定有非常多的机会要将数值字数(numeric string)转成 int 或 float类型的值,但数值字数可能不是很干净,有时还会有千分位、货币符号、前后有空白、甚至不是10进制,这样转换就有点累,像千分位或货币符号以前我是用 Replace 将,$ 等符号删除后再转换,但如果你是使用.Net Framework 2.0 以上其实就不用那么麻烦,内建就有功能帮你处理这些杂七杂八的东西,让我们来看看怎么做吧。

使用 int.Parse 或 int.TryParse 没看错就是 int.Parse ,使用 int.Parse 就可以做到含有千分位、货币符号的 String 转型。

可能你会说我骗你,那想必没有看看 Parse 这个方法(Method) 的其他参数,Parse 其中有一个参数 System.Globalization.NumberStyles 枚举类型(Enum)就是用来声明说传入的 string 的样允许式,而NumberStyles的成员如下表:

名称 说明
None 一定要刚刚好是10进制整数数字。
AllowLeadingWhite 数字的前方允许有空白。
AllowTrailingWhite 数字的后方允许有空白。
AllowLeadingSign 数字的前方允许有正负号。
AllowTrailingSign 数字的后方允许有正负号。
AllowParentheses 允许有一对括住数字的括弧,括号表示要剖析的字符串代表负数。
AllowDecimalPoint 数值字符串可以有小数点。
AllowThousands 数值字符串可以包含群组分隔符号。
AllowExponent 数值字符串可以采用指数标记法。
AllowCurrencySymbol 数值字符串可以包含货币符号。
AllowHexSpecifIEr 数值字符串使用十六进制值,但不能在前方加上"0x" 或 "&h"。

以下是组合成员:

名称 说明
Integer AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign。
Hexnumber AllowLeadingWhite | AllowTrailingWhite | AllowHexSpecifIEr。
Number AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign | AllowDecimalPoint | AllowThousands。
float AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowDecimalPoint | AllowExponent。
Currency 除了AllowExponent 和 AllowHexSpecifIEr 之外的所有模式。
Any 除了AllowHexSpecifIEr 之外的所有模式。

这只是简表,详细内容请看[MSDN]NumberStyles 枚举类型。

而 int.Parse 默认使用的 NumberStyles 是 Integer,Integer 只允许前后有空白与加减的模式,所以传入其他。

还有其他如 decimal.Parse、float.Parse、byte.Parse、short.Parse 等等数字型的 ValueType 都支持使用 NumberStyles,因为其实他们都是用同一只 Class 来处理转换,只是使用的 NumberStyles 不同而已,如 decimal.Parse 默认使用的值为 NumberStyles.Currency 。

而 TryParse 是在转换时比较好的方法,因为 Parse 是值的格式不正确就会丢出 Exception 如果程序没有写好可能会使程序关闭,但 TryParse 就不一样,值的格式不正确只有不回传转换后的值而已,不会造成大太的灾难(不过也不一定,因为可能原本遇期用 TryParse 接收转换值的变量一定会有值,但转换失败又没有做其他的处理,最后可能还是产生了 NullReferenceException,要避免这样的问题发生,可以参考防御式编程(Defensive programming)的精神)。

使用范例
//含有千分位int value1 = int.Parse("1,000,000",NumberStyles.AllowThousands);		int value2 = (int)decimal.Parse("1,000"); //当然用decimal.Parse也可以,只是要转型//但有小数就不能用int.Parse会失败int value3 = (int)decimal.Parse("1,000.50",NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint);	//有货币符号也可以,但$与数字不能分开,但使用电脑的文化设定int value4 = int.Parse("NT,NumberStyles.AllowCurrencySymbol | NumberStyles.AllowThousands);//也可以使用不同国家的文化设定int value5 = int.Parse(",NumberStyles.Any,CultureInfo.GetCultureInfo("en")); //美国	int value6 = int.Parse("¥1,CultureInfo.GetCultureInfo("ja")); //日本//指数int value7 = int.Parse("1E+6",NumberStyles.AllowExponent);//括弧int value8 = int.Parse("(1,000)",NumberStyles.AllowParentheses | NumberStyles.AllowThousands);//16进制int value9 = int.Parse("F4240",NumberStyles.Hexnumber);//前后空白int value10 = int.Parse("  1000000  ",NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite);//但百分值不支持,要额外处理int str =  "10.5%";if (str.IndexOf(‘%‘)>-1){	int value11 = decimal.Parse(str.TrimEnd(new char[] {‘%‘,‘ ‘})) / 100M;		}//2或8进制,要使用另一个 Methodint value12 = Convert.ToInt32("11110100001001000000",2);int value13 = Convert.ToInt32("3641100",8);//如果懒惰可以这样写,只是性能会差一点点int value14 = (int)decimal.Parse("1,NumberStyles.Any);
参考数据

[MSDN]NumberStyles 枚举类型

[Wikipedia]Defensive programming

原文:大专栏  [C#]简单快速将各种数值字数转成数字(string to int)

总结

以上是内存溢出为你收集整理的[C#]简单快速将各种数值字数转成数字(string to int)全部内容,希望文章能够帮你解决[C#]简单快速将各种数值字数转成数字(string to int)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1214682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存