Подтвердить что ты не робот

Как округлить значение С# до ближайшего целого?

Я хочу округлить double до int.

Например,

double a=0.4, b=0.5;

Я хочу изменить их оба на целое.

так что

int aa=0, bb=1;

aa - от a и bb от b.

Любая формула для этого?

4b9b3361

Ответ 1

Используйте Math.Ceiling чтобы округлить

Math.Ceiling(0.5); // 1

Используйте Math.Round чтобы просто округлить

Math.Round(0.5, MidpointRounding.AwayFromZero); // 1

И Math.Floor чтобы округлить

Math.Floor(0.5); // 0

Ответ 2

Отъезд Math.Round. Затем вы можете передать результат в int.

Ответ 3

.NET Framework по умолчанию использует банковское округление в Math.Round. Вы должны использовать эту перегрузку:

Math.Round(0.5d, MidpointRounding.AwayFromZero)  //1
Math.Round(0.4d, MidpointRounding.AwayFromZero)  //0

Ответ 4

Math.Round

Округляет значение с плавающей запятой двойной точности до ближайшего целого значения.

Ответ 5

Используйте функцию вместо 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);
}

Ответ 6

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();

Ответ 7

Это просто. Итак, следуйте этому коду.

decimal d = 10.5;
int roundNumber = (int)Math.Floor(d + 0.5);

Результат 11

Ответ 8

Другой вариант:

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);