Я хочу округлить double до int.
Например,
double a=0.4, b=0.5;
Я хочу изменить их оба на целое.
так что
int aa=0, bb=1;
aa
- от a
и bb
от b
.
Любая формула для этого?
Я хочу округлить double до 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(0.5); // 0
Отъезд Math.Round. Затем вы можете передать результат в int
.
.NET Framework по умолчанию использует банковское округление в 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(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();
Это просто. Итак, следуйте этому коду.
decimal d = 10.5;
int roundNumber = (int)Math.Floor(d + 0.5);
Результат 11
Другой вариант:
string strVal = "32.11"; // will return 33
// string strVal = "32.00" // returns 32
// string strVal = "32.98" // returns 33
string[] valStr = strVal.Split('.');
int32 leftSide = Convert.ToInt32(valStr[0]);
int32 rightSide = Convert.ToInt32(valStr[1]);
if (rightSide > 0)
leftSide = leftSide + 1;
return (leftSide);