【问题标题】:Round to 1 decimal place in C#在 C# 中舍入到小数点后 1 位
【发布时间】:2013-09-30 08:54:36
【问题描述】:

我想将我的答案四舍五入到小数点后 1 位。例如:6.7、7.3 等。 但是当我使用 Math.round 时,答案总是没有小数位。例如:6、7

这是我使用的代码:

int [] nbOfNumber = new int[ratingListBox.Items.Count];
int sumInt = 0;
double averagesDoubles;

for (int g = 0; g < nbOfNumber.Length; g++)
{
    nbOfNumber[g] = int.Parse(ratingListBox.Items[g].Text);
}

for (int h = 0; h < nbOfNumber.Length; h++)
{
    sumInt += nbOfNumber[h];
}

averagesDoubles = (sumInt / ratingListBox.Items.Count);
averagesDoubles = Math.Round(averagesDoubles, 2);
averageRatingTextBox.Text = averagesDoubles.ToString();

【问题讨论】:

标签: c# rounding


【解决方案1】:

你除以int,结果会是int。 (使得 13 / 7 = 1)

先尝试将其转换为浮点数:

averagesDoubles = (sumInt / (double)ratingListBox.Items.Count);

averagesDoubles = Math.Round(averagesDoubles, 2); 负责舍入双精度值。它会将5.976 舍入到5.98,但这不会影响值的呈现。

ToString() 负责表示小数。

试试:

averagesDoubles.ToString("0.0");

【讨论】:

  • 我想显示到小数点后一位,.ToString("0.0") 为我工作。
【解决方案2】:

请根据Math.Round 的定义验证averagesDoubles 是双精度还是十进制,并将这两行结合起来:

averagesDoubles = (sumInt / ratingListBox.Items.Count);
averagesDoubles = Math.Round(averagesDoubles, 2);

到:

averagesDoubles = Math.Round((sumInt / ratingListBox.Items.Count),2);

在上述情况下,2 表示您要四舍五入的小数位数。查看上面的链接以获取更多参考。

【讨论】:

    【解决方案3】:

    int 除法总是会忽略分数

     (sumInt / ratingListBox.Items.Count); 
    

    这里 sunint 是 int 并且 ratingListBox.Items.Coun 也是 int ,所以除法永远不会导致分数

    要获取分数中的值,您需要像 float 这样的数据类型,然后将 sumInt 和 count 类型转换为 float 和 double,然后使用除法

    【讨论】:

      【解决方案4】:

      var val= Math.Ceiling(100.10m); 结果 101

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多