在 C# 中如何四舍五入到十分位?

问题描述 投票:0回答:6

我试图了解如何使用 C# 四舍五入到最接近的十分位。例如,我有一个 double 类型的值。该双倍当前设置为 10.75。但是,我需要四舍五入然后截断超过十分位的所有内容。在本例中,我寻求的值为 10.8。在 C# 中如何四舍五入到十分位?

c# rounding
6个回答
41
投票
Math.Round(yourNumber, 1)

第二个参数是要舍入的小数位数。在您的情况下,您希望最终结果保留 1 位小数。


18
投票

您只需使用 Math.Round

 重载,它接受 
decimals
参数。

Math.Round(10.75, 1) // returns 10.8

仅供比较:

Math.Round(10.75)    // returns 11
Math.Round(10.75, 0) // returns 11
Math.Round(10.75, 2) // returns 10.75

8
投票

既然您在标题中使用了

Math.Round()
,我将假设您已经尝试过基本的
Math.Round(10.75,1)
方法,并且它会返回您不期望的内容。考虑到这一点,我建议查看该函数的一些不同重载,特别是接受
MidPointRounding
枚举的重载:

http://msdn.microsoft.com/en-us/library/f5898377.aspx


4
投票

您真的需要对其进行四舍五入,还是可以将其格式化以供打印但允许变量本身保持其精度?比如:

decimal value = 10.75;
value.ToString ("#.#");

2
投票

如果您只想“剪切”第一个小数点后的所有内容,这应该可行:

   return Math.Round(value * 10)/10

-1
投票

您可以采取 5 种

MidpointRounding
策略来获得您所期望的
Math.Round()
:

  1. ToEven(默认) 当一个数字介于其他两个数字之间时,它会向最接近的偶数舍入。

  2. AwayFromZero(数学舍入) 当一个数字介于其他两个数字之间时,它会向远离零的最接近的数字舍入。 (又名,四舍五入)

  3. ToZero 根据指定精度对数字进行舍入

  4. ToNegativeInfinity (floor) 根据指定精度对数字进行舍入

  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 ---------------------
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
© www.soinside.com 2019 - 2024. All rights reserved.