1
数字处理技巧
本实例主要介绍如何对计算结果四舍五入。本实例主要是通过Math类的Pow方法来实现的。运行程序,在文本框中输入数字,单击“确定”按钮四舍五入文本框中的数字。主要代码如下:
public static double Round(double d, int i)
{
if (d >= 0)
{
d += 5 * Math.Pow(10, -(i + 1));//
}
else
{
d += -5 * Math.Pow(10, -(i + 1));
}
string str = d.ToString();
string[] strs = str.Split('.');
int idot = str.IndexOf('.');
string prestr = strs[0];
string poststr = strs[1];
if (poststr.Length > i)
{
poststr = str.Substring(idot + 1, i);//截取需要位数
}
if (poststr.Length <= 2)
{
poststr = poststr + "0";
}
string strd = prestr + "." + poststr;
d = Double.Parse(strd);//将字符串转换为双精度实数
return d;
}
参数d表示要四舍五入的数;i表示要保留的小数点后的位数。
本实例主要介绍如何将商品金额小写转换成大写。运行程序,在文本框中输入小写金额,单击【确定】按钮执行转换。主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
String[] Scale = { "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟" };
String[] Base = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String Temp = textBox1.Text.ToString();
String Info = null;
int index = Temp.IndexOf(".",0,Temp.Length);//判断是否有小数点
if (index != -1)
{
Temp = Temp.Remove(Temp.IndexOf("."), 1);
for (int i = Temp.Length; i > 0; i--)
{
int Data = Convert.ToInt16(Temp[Temp.Length - i]);
Info += Base[Data - 48];
Info += Scale[i - 1];
}
}
else
{
for (int i = Temp.Length; i > 0; i--)
{
int Data = Convert.ToInt16(Temp[Temp.Length - i]);
Info += Base[Data - 48];
Info += Scale[i+1];
}
}
textBox2.Text = Info;
}
本实例主要介绍如何根据生日自动计算员工年龄。通常的方法是,先从员工的生日字符中取出年份,然后用当前的日期年份减去员工出生年份,得到的整数就是员工实际年龄。主要代码如下:
string m_Str = "1984-04-04";
int m_Y1 = DateTime.Parse(m_Str).Year;
int m_Y2 = DateTime.Now.Year;
int m_Age = m_Y2 - m_Y1;
本实例主要介绍如何设置货币数值中使用的小数位数。主要是使用NumberFormatInfo类的CurrencyDecimalDigits属性来设置在货币值中使用的小数位数,使用CultureInfo类的NumberFormat属性来指定字符串的域区样。
语法格式如下:
public int CurrencyDecimalDigits { get; set; }
属性值:要在货币值中使用的小数位数。InvariantInfo的默认值为2。
CultureInfo类提供有关特定区域性的信息(如区域性的名称、书写系统和使用的日历)以及如何设置日期和排序字符串的格式。此类有多种重载形式,本实例使用的重载形式如下:
public CultureInfo (int culture,bool useUserOverride)
参数说明
l culture:预定义的CultureInfo标识符、现有CultureInfo对象的LCID属性或仅Windows区域性标识符。
l UseUserOverride:一个布尔值,指示是使用用户选定的区域性设置(True),还是使用默认区域性设置(False)。
NumberFormat属性获取或设置NumberFormatInfo,它定义适合区域性的、显示数字、货币和百分比的格式。其语法格式如下:
public virtual NumberFormatInfo NumberFormat { get; set; }
属性值:一个NumberFormatInfo,它定义适合区域性的、显示数字、货币和百分比的格式。
主要代码如下:
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
Int64 myInt = 12345;
private void button2_Click(object sender, EventArgs e)
{
GN.CurrencyDecimalDigits = 2;
MessageBox.Show(myInt.ToString("C", GN), "保留两位小数");
}
private void button4_Click(object sender, EventArgs e)
{
GN.CurrencyDecimalDigits = 3;
MessageBox.Show(myInt.ToString("C", GN), "保留三位小数");
}
本实例主要介绍如何自定义货币值中的小数点,主要是使用NumberFormatInfo类的CurrencyDecimalSeparator属性来完成的。运行程序,效果如图5.1和图5.2所示。
图5.1 自定义$符 图5.2 自定义*符
CurrencyDecimalSeparator属性获取或设置要在货币值中用做小数点分隔符的字符串。其语法格式如下:
public string CurrencyDecimalSeparator { get; set; }
属性值:要在货币值中用做小数点分隔符的字符串,默认值为“.”。
主要代码如下:
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
Int64 myInt = 123456789;
private void button1_Click(object sender, EventArgs e)
{
GN.CurrencyDecimalSeparator = "$";
MessageBox.Show("定义前:"+myInt.ToString("C")+"/n"+"定义后:"+myInt.ToString("C", GN),"自定义小数点为$符");
}
private void button2_Click(object sender, EventArgs e)
{
GN.CurrencyDecimalSeparator = "*";
MessageBox.Show("定义前:" + myInt.ToString("C") + "/n" + "定义后:" + myInt.ToString("C", GN), "自定义小数点为*符");
}
本实例主要介绍如何自定义货币值中对小数点左边数字分组字符,主要是使用NumberFormatInfo类的CurrencyGroupSeparator属性来设置的。运行程序,其效果如图5.3所示。
CurrencyGroupSeparator属性获取或设置在货币值中对小数点左边数字进行分组的字符串。其语法格式如下:
public string CurrencyGroupSeparator { get; set; }
属性值:在货币值中对小数点左边数字进行分组的字符串,默认值为“,”。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
Int64 myInt = 123456789;
GN.CurrencyGroupSeparator = "、";
MessageBox.Show("定义前: " + myInt.ToString("C") + "/n" + "定义后: " + myInt.ToString("C", GN), "分组字符用、号");
}
本实例主要介绍如何自定义货币值中的小数点,主要是使用NumberFormatInfo类的CurrencyGroupSizes属性来完成的。运行程序,效果如图5.4和图5.5所示。
图5.4 {2,3,1}格式 图5.5 {2,3,2}格式
CurrencyGroupSizes属性获取或设置货币值中小数点左边每一组的位数。其语法格式如下:
public int[] CurrencyGroupSizes { get; set; }
属性值:货币值中小数点左边每一组的位数,默认值是一个一维数组,该数组只包含一个设置为3的元素。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo CN = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
Int64 myInt = 123456789012345;
int[] mySizes1 = { 2, 3, 1 };
int[] mySizes2 = { 2, 3, 2 };
CN.CurrencyGroupSizes = mySizes1;
MessageBox.Show("定义前:" + myInt.ToString("C") + "/n" + "定义后:" + myInt.ToString("C", CN), "{ 2, 3, 1 }格式");
CN.CurrencyGroupSizes = mySizes2;
MessageBox.Show("定义前:" + myInt.ToString("C") + "/n" + "定义后:" + myInt.ToString("C", CN), "{ 2, 3, 2 }格式");
}
本实例主要介绍如何使用NumberFormatInfo类的PercentDecimalDigits属性来设置百分比值中小数点后面保留的位数。运行程序,效果如图5.6所示。
PercentDecimalDigits属性获取或设置在百分比值中使用的小数位数。其语法格式如下:
public int PercentDecimalDigits { get; set; }
属性值:在百分比值中使用的小数位数,默认值为2。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
Double myInt = 0.9774;
string strInfo=null;
GN.PercentDecimalDigits = 1;
strInfo += "保留一位小数:" + string.Format(myInt.ToString("P",GN));
GN.PercentDecimalDigits = 2;
strInfo += "/n保留二位小数:" + string.Format(myInt.ToString("P", GN));
GN.PercentDecimalDigits = 4;
strInfo += "/n保留四位小数:" + string.Format(myInt.ToString("P", GN));
GN.PercentDecimalDigits = 6;
strInfo += "/n保留六位小数:" + string.Format(myInt.ToString("P", GN));
MessageBox.Show(strInfo,"定义效果");
}
本实例主要介绍如何使用NumberFormatInfo类的PercentDecimalSeparator属性设置百分比小数点分隔符的字符串。运行程序,效果如图5.7所示。
PercentDecimalSeparator属性设置在百分比值中用做小数点分隔符的字符串。其语法格式如下:
public string PercentDecimalSeparator { get; set; }
属性值:在百分比值中用做小数点分隔符的字符串,默认值为“.”。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
Double myInt = 0.122434;
string strPercent = null;
GN.PercentDecimalSeparator = " ";
strPercent += "用空格代替小数点:" + myInt.ToString("P", GN);
GN.PercentDecimalSeparator = "@";
strPercent += "/n用@符代替小数点:" + myInt.ToString("P", GN);
GN.PercentDecimalSeparator = "#";
strPercent += "/n用#符代替小数点:" + myInt.ToString("P", GN);
GN.PercentDecimalSeparator = "*";
strPercent += "/n用*号代替小数点:" + myInt.ToString("P", GN);
MessageBox.Show(strPercent, "定义效果");
}
本实例主要介绍如何使用NumberFormatInfo类的PercentGroupSeparator属性设置百分比小数点左边的分节号。运行程序,效果如图5.8所示。
PercentGroupSeparator属性获取或设置在百分比值中对小数点左边数字进行分组的字符串。其语法格式如下:
public string PercentGroupSeparator { get; set; }
属性值:在百分比值中对小数点左边数字进行分组的字符串,默认值为“,”。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
Double myInt = 12345.678;
string strSperar = null;
GN.PercentGroupSeparator = ",";
strSperar += "用逗号作分隔符:" + myInt.ToString("P", GN);
GN.PercentGroupSeparator = "、";
strSperar += "/n用顿号作分隔符:" + myInt.ToString("P", GN);
GN.PercentGroupSeparator = "'";
strSperar += "/n用单引号作分隔符:" + myInt.ToString("P", GN);
MessageBox.Show(strSperar, "定义效果");
}
本实例主要介绍如何使用NumberFormatInfo类的PercentGroupSizes属性设置百分比小数点左边每一组的位数。运行程序,效果如图5.9所示。
PercentGroupSizes属性获取或设置百分比值中小数点左边的每一组的位数。其语法格式如下:
public int[] PercentGroupSizes { get; set; }
属性值:百分比值中小数点左边的每一组的位数。默认值是一个一维数组,该数组只包含一个设置为3的元素。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
Double myInt= 510214720805231.4835;
string strInt =null;
strInt+= "默认格式:" + myInt.ToString("p",GN);
int[] MySizes1 = { 2, 3, 4 };
GN.PercentGroupSizes=MySizes1;
strInt+= "/n{ 2, 3, 4 }格式:" + myInt.ToString("p",GN);
int[] MySizes2 = { 2, 3, 2 };
GN.PercentGroupSizes=MySizes2;
strInt+= "/n{ 2, 3, 2 }格式:" + myInt.ToString("p",GN);
int[] MySizes3 = { 1, 2, 3 };
GN.PercentGroupSizes=MySizes3;
strInt+= "/n{ 1, 2, 3 }格式:" + myInt.ToString("p",GN);
MessageBox.Show(strInt, "设置效果", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例主要介绍如何使用NumberFormatInfo类的PercentSymbols属性设置百分比符号。运行程序,效果如图5.10所示。
PercentSymbols属性用于获取或设置用作百分比符号的字符串。其语法格式如下:
public string PercentSymbol { get; set; }
属性值:用作百分比符号的字符串,默认值为“%”。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN",false).NumberFormat;
double intPrecnt = 102578.6584;
string strPrecnt = null;
GN.PercentSymbol = "%";
strPrecnt += "默认符号: " + intPrecnt.ToString("p",GN);
GN.PercentSymbol = "&";
strPrecnt += "/n自定义符号&: " + intPrecnt.ToString("p", GN);
GN.PercentSymbol = "*";
strPrecnt += "/n自定义符号*: " + intPrecnt.ToString("p", GN);
GN.PercentSymbol = "#";
strPrecnt += "/n自定义符号#: " + intPrecnt.ToString("p", GN);
MessageBox.Show(strPrecnt, "设置效果", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本技巧主要介绍如何使用NumberFormatInfo类的NumberDecimalDigits属性设置数字小数点右边的保留位数,效果如图5.11所示。
NumberDecimalDigits属性获取或设置在数值中使用的小数位数。其语法格式如下:
public int NumberDecimalDigits { get; set; }
属性值:在数值中使用的小数位数,默认值为2。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN= new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
double intNumber = 4458524.2568412547;
string strNumber = "";
strNumber+="默认小数位数:"+intNumber.ToString("N");
GN.NumberDecimalDigits = 3;
strNumber += "/n保留三位小数:" + intNumber.ToString("N",GN);
GN.NumberDecimalDigits =5;
strNumber += "/n保留五位小数:" + intNumber.ToString("N",GN);
GN.NumberDecimalDigits = 7;
strNumber += "/n保留七位小数:" + intNumber.ToString("N",GN);
MessageBox.Show(strNumber, "设置效果", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例主要介绍如何使用NumberFormatInfo类的NumberGroupSizes属性设置数字小数点左边数字分组位数,效果如图5.12所示。
NumberGroupSizes属性获取或设置数值中小数点左边每一组的位数。其语法格式如下:
public int[] NumberGroupSizes { get; set; }
属性值:数值中小数点左边每一组的位数。默认值是一个一维数组,该数组只包含一个设置为3的元素。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
System.Globalization.NumberFormatInfo GN = new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
double intNumber = 711413414517.12;
string strNumber = null;
strNumber += "默认格式:" + intNumber.ToString("N",GN) ;
int[] MySizes1 = { 1, 3, 4 };
GN.NumberGroupSizes = MySizes1;
strNumber += "/n{ 1, 3, 4 }格式:" + intNumber.ToString("N", GN);
int[] MySizes2 = { 2, 3, 0 };
GN.NumberGroupSizes = MySizes2;
strNumber += "/n{ 2, 3, 0 }格式:" + intNumber.ToString("N", GN);
int[] MySizes3 = { 2, 6, 2 };
GN.NumberGroupSizes = MySizes3;
strNumber += "/n{ 2, 6, 2 }格式:" + intNumber.ToString("N", GN);
MessageBox.Show(strNumber, "设置效果", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例主要用NumberFormatInfo类的CurrencyGroupSeparator属性格式化输入数据为货币格式。CurrencyGroupSeparator属性获取或设置在货币值中对小数点左边数字进行分组的字符串。运行程序,在输入数据文本框中,输入数字,单击“格式化输入数据为货币格式”按钮,效果如图5.13所示。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
NumberFormatInfo nfi = new CultureInfo("zh-CN", false).NumberFormat;
nfi.CurrencyGroupSeparator = " ";
textBox2.Text = Convert.ToDouble(textBox1.Text).ToString("c",nfi);
}
本实例介绍如何使用Math类的BigMul方法实现数字的乘积。此方法生成两个 32 位数字的完整乘积,语法格式如下:
public static long BigMul (int a,int b)
运行程序,效果如图5.14所示。
图5.14 两个整数的乘积
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
int int1 = Int32.MaxValue;
int int2 = Int32.MaxValue;
long longResult;
longResult = Math.BigMul(int1, int2);
string str = "整数" + Int32.MaxValue.ToString() + "与" + "整数" + Int32.MaxValue.ToString() + "乘积 /n";
str += "结果:" + longResult.ToString();
MessageBox.Show(str, "两个整数的乘积", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例主要介绍利用Convert类的ToInt32方法如何把二进制数转化为十进制数。Convert类将一个基本数据类型转换为另一个基本数据类型。
ToInt32方法将指定的值转换为32位无符号整数。此方法有多种重载形式,其实现二进制转换为十进制数的语法如下:
public static uint ToUInt32 (string value,int fromBase)
参数说明
l value:包含数字的String。
l fromBase:value中数字的基数,必须是2、8、10或16。
l 返回值:等效于value中的数字的32位有符号整数。如果value为空则返回值为零。
运行程序,在二进制文本框中输入二进制数,单击“二进制转换为十进制”按钮,效果如图5.15所示。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = Convert.ToInt32(textBox1.Text.Trim(),2).ToString();
}
本实例实现将二进制数转换为八进制数。首先利用Convert类的ToInt32方法把二进制数转换为十进制数,然后利用Convert类的ToString方法转换成八进制数。ToString方法将指定的32位有符号整数的值转换为它的等效String表示形式。
public static string ToString (int value,int toBase)
参数说明
l value:32位的有符号整数。
l ToBase:返回值的基数,必须是2、8、10或16。
返回值:以toBase为基数的value的String表示形式。
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
//把二进数转换为十进制数
int intTen = Convert.ToInt32(textBox1.Text.Trim(),2);
//把十进制数转换为八进制数
textBox2.Text = Convert.ToString(intTen,8);
}
本实例主要介绍如何将二进制数转换为十六进制数。首先利用Convert类的ToInt32方法把二进制数转换为十进制数,然后利用Convert类的ToString方法转换成十六进制数。
运行程序,在二进制文本框中输入二进制数,单击转换按钮,效果如图5.16所示。
图5.16 二进制转换为十六进制
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
//把二进制数转换为十进制数
int intTen = Convert.ToInt32(textBox1.Text.Trim(),2);
//把十进制数转换为十六进制数
textBox2.Text = Convert.ToString(intTen,16);
}
本实例主要介绍如何用Random类的Next方法随机生成0~9之间的整数。Random类表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。Next方法返回一个指定范围内的随机数。主要代码如下:
Random rd = new Random();
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("0-9随机整数:/n"+rd.Next(0,9).ToString(),"随机整数", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例主要介绍如何用Random类的NextDouble方法随机生成0~1之间的数。RNextDouble方法返回一个介于0.0和1.0之间的随机数。运行程序,单击“确定”按钮,效果如图5.17所示。主要代码如下:
Random rd = new Random();
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("0-1随机小数:/n" + rd.NextDouble(), "随机小数", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
本实例介绍如何使用Math类的Abs方法实现数字的绝对值。此方法有多种重载形式,本实例所用的重载形式如下:
public static decimal Abs (decimal value)
此重载形式返回Decimal数字的绝对值。运行程序,效果如图5.18所示。主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
sbyte sb1 = -16, sb2 = 16;