Hoe de waarde C# naar boven afronden op het dichtstbijzijnde gehele getal?

Ik wil dubbel naar boven afronden.

Bijvoorbeeld,

double a=0.4, b=0.5;

Ik wil ze allebei veranderen in een geheel getal.

zodat

int aa=0, bb=1;

aais van aen bbis van b.

Is er een formule om dat te doen?


Antwoord 1, autoriteit 100%

Gebruik Math.Ceilingom naar boven af ​​te ronden

Math.Ceiling(0.5); // 1

Gebruik Math.Roundom gewoon af te ronden

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

En Math.Floorom naar beneden af ​​te ronden

Math.Floor(0.5); // 0

Antwoord 2, autoriteit 7%

Bekijk Math.Round. U kunt het resultaat vervolgens casten naar een int.


Antwoord 3, autoriteit 3%

Het .NET-framework gebruikt standaard bankierafronding in Math.Round. Gebruik deze overbelasting:

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

Antwoord 4

Math.Round

Rondt een dubbele-precisie drijvende-kommawaarde af op de dichtstbijzijnde integrale waarde.


Antwoord 5

Gebruik een functie in plaats van MidpointRounding.AwayFromZero:

myRound(1.11125,4)

Antwoord:- 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);
}

Antwoord 6

Math.Round(0.5) retourneert nul vanwege afrondingsfouten met drijvende komma, dus u moet een afrondingsfout toevoegen aan de oorspronkelijke waarde om ervoor te zorgen dat deze niet naar beneden wordt afgerond, bijvoorbeeld.

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

Antwoord 7

Een andere optie:

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

Other episodes