Wie könnte ich konvertieren ein doppelt auf den nächsten ganzzahligen Wert?

StackOverflow https://stackoverflow.com/questions/633335

  •  10-07-2019
  •  | 
  •  

Frage

Wie konvertieren Sie ein Doppel in das nächste int?

War es hilfreich?

Lösung

Verwenden Math.round(), möglicherweise in Verbindung mit MidpointRounding.AwayFromZero

Beispiel:

Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3

Andere Tipps

double d = 1.234;
int i = Convert.ToInt32(d);

Referenz

Griffe Runden wie folgt:

  

gerundet auf die nächste 32-Bit-Ganzzahl mit Vorzeichen. Wenn der Wert auf halber Strecke   zwischen zwei ganzen Zahlen, wird die gerade Zahl zurückgegeben; das heißt, 4,5   umgewandelt wird 4 und 5.5 bis 6 umgewandelt wird.

Sie können auch Funktion:

//Works with negative numbers now
static int MyRound(double d) {
  if (d < 0) {
    return (int)(d - 0.5);
  }
  return (int)(d + 0.5);
}

auf der Architektur Je ist es mehrmals schneller.

double d;
int rounded = (int)Math.Round(d);

Ich weiß, diese Frage ist alt, aber ich kam in meiner Suche nach der Antwort auf meine ähnliche Frage über sie. Ich dachte, ich würde den sehr nützlichen Tipp teilen, die ich erhalten habe.

Wenn in int konvertieren, fügen Sie einfach 0,5 auf Ihren Wert vor einziehe. Wie einziehe immer fällt die geringere Zahl in int (zB (int) 1,7 = 1), wenn Ihre Nummer 0,5 oder höher ist, ist es 0,5 Zugabe wird in die nächste Zahl nach oben bringen und Ihrem gesenkten dem richtigen Wert int sollte zurückkehren . (Z (int) (1,8 + 0,5) = 2)

Ich hoffe, diese Antwort ist hilfreich für jeden.

Für Unity verwenden Mathf.RoundToInt .

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.0f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.2f));
        // Prints 11
        Debug.Log(Mathf.RoundToInt(10.7f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.5f));
        // Prints 12
        Debug.Log(Mathf.RoundToInt(11.5f));

        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.0f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.2f));
        // Prints -11
        Debug.Log(Mathf.RoundToInt(-10.7f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.5f));
        // Prints -12
        Debug.Log(Mathf.RoundToInt(-11.5f));
    }
}

Quelle

public static int RoundToInt(float f) { return (int)Math.Round(f); }

Ich entwickle einen wissenschaftlichen Rechner, der eine Int-Taste Sport. Ich habe die folgende ist eine einfache und zuverlässige Lösung gefunden:

double dblInteger;
if( dblNumber < 0 )
   dblInteger = Math.Ceiling(dblNumber);
else
   dblInteger = Math.Floor(dblNumber);

Math.Round manchmal unerwartete oder unerwünschte Ergebnisse und explizite Konvertierung erzeugt oft in Integer (über Guss- oder Convert.ToInt ...) erzeugt falsche Werte für höhere Präzision Zahlen. Das oben beschriebene Verfahren scheint immer zu funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top