如何将C#值整数到最接近的整数?
我想把整数翻倍到int。
例如,
double a=0.4, b=0.5;
我想把它们都改为整数。
以便
int aa=0, bb=1;
aa
是从a
和bb
是从b
。
任何公式要做到这一点?
使用Math.Ceiling
来整理
Math.Ceiling(0.5); // 1
使用Math.Round
来回合
Math.Round(0.5, MidpointRounding.AwayFromZero); // 1
Math.Floor
向下Math.Floor
入
Math.Floor(0.5); // 0
检查Math.Round 。 然后你可以将结果转换为一个int
。
C#在默认情况下在Math.Round
中使用银行家的四舍五入。 你应该使用这个重载:
Math.Round(0.5d, MidpointRounding.AwayFromZero) //1 Math.Round(0.4d, MidpointRounding.AwayFromZero) //0
使用函数代替MidpointRounding.AwayFromZero
:
myRound(1.11125,4)
答: – 1.1114
public static Double myRound(Double Value, int places = 1000) { Double myvalue = (Double)Value; if (places == 1000) { if (myvalue - (int)myvalue == 0.5) { myvalue = myvalue + 0.1; return (Double)Math.Round(myvalue); } return (Double)Math.Round(myvalue); places = myvalue.ToString().Substring(myvalue.ToString().IndexOf(".") + 1).Length - 1; } if ((myvalue * Math.Pow(10, places)) - (int)(myvalue * Math.Pow(10, places)) > 0.49) { myvalue = (myvalue * Math.Pow(10, places + 1)) + 1; myvalue = (myvalue / Math.Pow(10, places + 1)); } return (Double)Math.Round(myvalue, places); }
Math.Round
将双精度浮点值舍入到最接近的整数值。
很简单。 所以按照这个代码。
decimal d = 10.5; int roundNumber = (int)Math.Floor(d + 0.5);
结果是 11
Math.Round(0.5)由于浮点舍入误差而返回零,因此您需要将舍入误差量添加到原始值以确保不会舍入,例如。
Console.WriteLine(Math.Round(0.5, 0).ToString()); // outputs 0 (!!) Console.WriteLine(Math.Round(1.5, 0).ToString()); // outputs 2 Console.WriteLine(Math.Round(0.5 + 0.00000001, 0).ToString()); // outputs 1 Console.WriteLine(Math.Round(1.5 + 0.00000001, 0).ToString()); // outputs 2 Console.ReadKey();