问题阐述
在C#中,使用Math类中的Round方法对小数进行四舍五入并不是很完美,用什么方法还可以将小数四舍五入?
专家解答
1.知识点介绍
对小数数值进行四舍五入,首先应当确认保留小数位,如果数值的小数精度大于保留小数位,那么开始四舍五入计算。四舍五入的方法非常简单,在所有要丢失精度的小数位中加5如果大于十则向前进位,最后计算出四舍五入的结果。下面的示例将会向读者介绍怎样对小数进行四舍五入。
下面通过示例来演示小数的四舍五入。
2.示例
(1)打开Visual Studio 2010开发环境,新建一个Windows窗体应用程序,命名为Round。
(2)更改默认窗体Form1的Name属性为Frm_Main,在该窗体中添加3个TextBox控件,分别用于输入和输出计算结果;添加一个Combobox控件,用于设置计算结果保留的小数位数;添加一个Button按钮,用于计算两个数值相加的结果。
(3)程序主要代码如下:
private voidbtn_Get_Click(object sender, EventArgs e)
{
double P_dbl_d1, P_dbl_d2; //定义两个double类型变量
if (double.TryParse(txt_add1.Text, outP_dbl_d1) && //判断输入信息是否正确
double.TryParse(txt_add2.Text, outP_dbl_d2))
{
int i = cbox_select.SelectedIndex+1;
txt_add3.Text = //得到四舍五入后的值
string.Format("",Round(P_dbl_d1 +P_dbl_d2, cbox_select.SelectedIndex + 1)).ToString();
}
else
{
MessageBox.Show( //提示错误信息
"输入数值不正确!", "提示!");
}
}
///
/// 计算double值四舍五入的方法
///
///
进行四舍五入的数值
///
保留的小数位
/// 返回四舍五入后的double值
internal doubleRound(double dbl, int i)
{
string P_str_dbl =string.Format("",dbl);
string P_str_lower = //将double数值小数位转换为字符串
P_str_dbl.Split('.')[1];
intP_str_length = P_str_lower.Length; //计算double数值小数位长度
dbl += GetValue(i, P_str_length); //开始进行四舍五入运算
P_str_dbl = dbl.ToString(); //将运算后的值转换为字符串
if (P_str_dbl.Contains(".")) //判断是否存在小数位
{
string P_str_upper = //得到整数位字符串
P_str_dbl.Split('.')[0];
P_str_lower = P_str_dbl.Split('.')[1]; //得到小数位字符串
if (P_str_lower.Length > i) //判断数值位数是否大于保留小数位数
{
P_str_lower =P_str_lower.Substring( //截取保留的小数位
0, i);
return double.Parse(//返回double数值
P_str_upper + "." +P_str_lower);
}
else
{
return double.Parse(P_str_dbl); //如数值位数小于保留小数位数则直接返回
}
}
else
{
return double.Parse(P_str_dbl); //如果没有小数位则直接返回值
}
}
///
/// 得到小数数值的方法
///
///
四舍五入保留的位数
///
四舍五入丢失的位数
/// 返回小数值用于四舍五入计算
internal doubleGetValue(int int_null, int length)
{
string P_str_dbl = "0."; //定义字符串变量并赋值
for (int i = 0; i
{
if (i > int_null - 1)
{
P_str_dbl += "5"; //向小数的四舍五入部分加5
}
else
{
P_str_dbl += "0"; //向小数的保留部分加0
}
}
return double.Parse(P_str_dbl); //返回小数数值
}
private voidFrm_Main_Load(object sender, EventArgs e)
{
cbox_select.SelectedIndex = 0; //cbox_select控件默认选择第一项
}
示例的运行结果如图4.13所示
图4.13 对计算结果四舍五入
技巧:在程序设计过程中,适当的使用TryParse方法可以有效的避免数值转换过程中出现的异常。
专家点评
在了解了算术运算符后,我们可以方便的对数值进行加、减、乘、除等操作。如果对运算结果进行四舍五入,你可能会想到Math类中的Round方法,但是此方法并不适合标准的四舍五入,因为数值3.4445如果使用Round方法保留两位小数,那么得到的结果为3.44,显然,这不是我们需要的。本示例中的方法希望读者能熟练掌握。
领取专属 10元无门槛券
私享最新 技术干货