如何在C#中将一个数字四舍五入到两位小数?

491
我会使用 Math.Round 函数来完成这个操作。
16个回答

4

3

使用Math.Round(YourNumber, 2)可以指定你想要保留的小数位数。

你可以在这里阅读更多信息


2

Math.Floor(123456.646 * 100) / 100 会返回 123456.64


2
简单地说,Math.Round()可以解决这个问题,并通过向方法传递precision参数和MidpointRounding参数来适应不同的情况。
默认情况下,Math.Round使用的是MidpointRounding.ToEven,实际上是指银行家舍入法,即四舍五入到最近的偶数。
1.5 => 2
2.5 => 2
3.5 => 4
4.5 => 4

让我来澄清一下。实际上,你可以采用五种策略之一来获取你从 Math.Round() 中期望得到的结果:

  1. ToEven (默认) 当一个数恰好处于两个其他数的中间时,它会被舍入为最接近的偶数。

  2. AwayFromZero (数学舍入) 当一个数恰好处于两个其他数的中间时,它会被舍入为离零最远的数。(也就是四舍五入)

  3. ToZero 根据指定的精度向下舍入该数。

  4. ToNegativeInfinity (取整) 根据指定的精度向下舍入该数。

  5. ToPositiveInfinity (取整) 根据指定的精度向上舍入该数。

以下是代码,可以了解它们的工作原理:

var num1 = 1.5;
var num2 = 2.5;
var num3 = 3.5;
var num4 = 2.51;
var num5 = 2.48;

Console.WriteLine("----------------Round with MidpointRounding.ToEven (default) ---------------------");
Console.WriteLine($"{num1} => {Math.Round(num1, MidpointRounding.ToEven)}");
Console.WriteLine($"{num2} => {Math.Round(num2, MidpointRounding.ToEven)}");
Console.WriteLine($"{num3} => {Math.Round(num3, MidpointRounding.ToEven)}");
Console.WriteLine($"{num4} => {Math.Round(num4, MidpointRounding.ToEven)}");
Console.WriteLine($"{num5} => {Math.Round(num5, MidpointRounding.ToEven)}");

Console.WriteLine("----------------Round with MidpointRounding.AwayFromZero (mathematical rounding) ---------------------");
Console.WriteLine($"{num1} => {Math.Round(num1, MidpointRounding.AwayFromZero)}");
Console.WriteLine($"{num2} => {Math.Round(num2, MidpointRounding.AwayFromZero)}");
Console.WriteLine($"{num3} => {Math.Round(num3, MidpointRounding.AwayFromZero)}");
Console.WriteLine($"{num4} => {Math.Round(num4, MidpointRounding.AwayFromZero)}");
Console.WriteLine($"{num5} => {Math.Round(num5, MidpointRounding.AwayFromZero)}");

Console.WriteLine("----------------Round with MidpointRounding.ToZero ---------------------");
Console.WriteLine($"{num1} => {Math.Round(num1, MidpointRounding.ToZero)}");
Console.WriteLine($"{num2} => {Math.Round(num2, MidpointRounding.ToZero)}");
Console.WriteLine($"{num3} => {Math.Round(num3, MidpointRounding.ToZero)}");
Console.WriteLine($"{num4} => {Math.Round(num4, MidpointRounding.ToZero)}");
Console.WriteLine($"{num5} => {Math.Round(num5, MidpointRounding.ToZero)}");

Console.WriteLine("----------------Round with MidpointRounding.ToNegativeInfinity (floor) ---------------------");
Console.WriteLine($"{num1} => {Math.Round(num1, MidpointRounding.ToNegativeInfinity)}");
Console.WriteLine($"{num2} => {Math.Round(num2, MidpointRounding.ToNegativeInfinity)}");
Console.WriteLine($"{num3} => {Math.Round(num3, MidpointRounding.ToNegativeInfinity)}");
Console.WriteLine($"{num4} => {Math.Round(num4, MidpointRounding.ToNegativeInfinity)}");
Console.WriteLine($"{num5} => {Math.Round(num5, MidpointRounding.ToNegativeInfinity)}");

Console.WriteLine("----------------Round with MidpointRounding.ToPositiveInfinity (ceiling) ---------------------");
Console.WriteLine($"{num1} => {Math.Round(num1, MidpointRounding.ToPositiveInfinity)}");
Console.WriteLine($"{num2} => {Math.Round(num2, MidpointRounding.ToPositiveInfinity)}");
Console.WriteLine($"{num3} => {Math.Round(num3, MidpointRounding.ToPositiveInfinity)}");
Console.WriteLine($"{num4} => {Math.Round(num4, MidpointRounding.ToPositiveInfinity)}");
Console.WriteLine($"{num5} => {Math.Round(num5, MidpointRounding.ToPositiveInfinity)}");

结果:

----------------Round with MidpointRounding.ToEven (default) ---------------------
1.5 => 2
2.5 => 2
3.5 => 4
2.51 => 3
2.48 => 2
----------------Round with MidpointRounding.AwayFromZero (mathematical rounding) ---------------------
1.5 => 2
2.5 => 3
3.5 => 4
2.51 => 3
2.48 => 2
----------------Round with MidpointRounding.ToZero ---------------------
1.5 => 1
2.5 => 2
3.5 => 3
2.51 => 2
2.48 => 2
----------------Round with MidpointRounding.ToNegativeInfinity ---------------------
1.5 => 1
2.5 => 2
3.5 => 3
2.51 => 2
2.48 => 2
----------------Round with MidpointRounding.ToPositiveInfinity ---------------------
1.5 => 2
2.5 => 3
3.5 => 4
2.51 => 3
2.48 => 3

翻译:请提供要翻译的具体文本。 - starball
当有人通过谷歌搜索来到这里时,应该有一个完整的解释,准确地说明事物是如何运作的,以便充分理解用法。我已经清楚地解释给每个来到这个页面寻找问题答案的人听。 - mahdi yousefi
参加这个[导览]。这个平台的整体目标之一就是避免噪音。 - starball
那么其他人如何找到一个主题或问题的完整解释呢? - mahdi yousefi
请找到一个实际询问这个信息的问题,然后在那里写下这个答案。 - starball
我删掉了对那个类似问题的另一个答案,并在那里放上了这个答案的链接!谢谢你的反馈。 - mahdi yousefi

1

string a = "10.65678";

decimal d = Math.Round(Convert.ToDouble(a.ToString()),2)

将字符串a转换为双精度浮点数,并将其四舍五入至小数点后两位,结果存储在变量d中。

0
  public double RoundDown(double number, int decimalPlaces)
        {
            return Math.Floor(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
        }

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