[C#]简单快速将各种数值字数转成数字(string to int)
相信大家在写程序的时候,一定有非常多的机会要将数值字数(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的成员如下表:
以下是组合成员:
这只是简表,详细内容请看[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$1,NumberStyles.AllowCurrencySymbol | NumberStyles.AllowThousands); //也可以使用不同国家的文化设定 int value5 = int.Parse("$1,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进制,要使用另一个 Method int 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |