怎样实现小数的四舍五入?

问题阐述

在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,显然,这不是我们需要的。本示例中的方法希望读者能熟练掌握。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180526B0HUQH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券