转换为两位小数的双精度浮点数

13

大家好,我是一个C#新手,请问有人可以礼貌地告诉我如何将这段代码的值转换为double / 四舍五入的十进制数吗?谢谢。

DataTable dtValues = new DataTable("GetValues");

strValueNumber = ValueNumber[0].ToString();
dtGetValues = SQLMethods.GetValues(strValueNumber);

total = 0;

for (int i = 0; i < dtValues.Rows.Count; i++)
{
    total1 = total1 + Convert.ToInt32(dtGetValues.Rows[i]["total_1"]);                  
    total2 = total2 + Convert.ToDouble(dtGetValues.Rows[i]["total_2l"]) * .45; 

    tbtotal1.Text = total1.ToString();
    tbtotal2.Text = total2.ToString(); 
}
}               
catch (Exception ex)
{
    MessageBox.Show("Error in returning selected Values. " +
                    "Processed with error:" + ex.Message);
}
}

你应该将文本框设置在循环外面。total已经声明但未被使用。在循环之前,应将total1total2设置为零。 - MiMo
4个回答

19

使用 Math.Round

Math.Round(mydoublevalue, 2);

在您的代码中

tbtotal2.Text = Math.Round(total2, 2).ToString(); 

@user1483145:另外,正如你所说你是个新手,值得一提的是,.NET和因此C#有一种称为“decimal”的数据类型,它比“double”更准确地表示十进制数。 - Philip Daubmeier
1
这不会显示 .00,对吗?例如 26.00 将显示为 26 - windowsgm

8

我的回答可能有点晚,但是对于像我这样想要:

转换为double/decimal并且同时希望该值始终显示2位小数(.00)作为String的人们,请看下面的代码:

tbtotal2.Text = Math.Round(total2, 2).ToString("#.00"); 

以下内容表示始终保留两位小数。
"#.00"

如果有数值,则下面的内容表示两位小数。
"#.##"

6

如果你只想将值四舍五入以字符串形式显示,也可以使用String.Format

tbtotal1.Text = String.Format("{0:0.##}", total1);

文本 "{0:0.##}" 描述了您希望格式化的方式。# 表示不包括结尾零(例如 1.2 变为字符串 "1.2"),如果您改成 "{0:0.00}",将始终包含两位小数,因此双倍数值的 1.2 将变为 "1.20"。


2

像这样做。

 tbtotal1.Text = Math.Round(double.Parse(total1.ToString()), 2).ToString();
 tbtotal2.Text = Math.Round(double.Parse(total2.ToString()), 2).ToString(); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接