2016-04-08 14 views
0

Hier ist das Skript Referenzdokument für Mathf.FloorToInt Wie Sie sehen können, sollte es -0.5 bis -1-Runde. Aus irgendeinem Grund scheint es den Wert 0 zurückzugeben, wenn es mit meinen Berechnungen verwendet wird.Einheit C# Mathf.FloorToInt (-0.5) gibt 0 zurück (verhält sich wie Mathf.CielToInt)

Ich habe zwei Versionen der gleichen Funktionen, die auf sehr ähnliche Weise funktionieren, aber unterschiedliche Ausgaben geben. Mein Code wird immer nur ganze Zahlen zwischen 3 und 18 an diese Funktionen senden.

Diese Version wirkt, als ob es Mathf.CielToInt (0 zurück in einem Fall von statRoll = 9) wurde unter Verwendung von:

public int getBonus(int statRoll) 
{ 
    int result = Mathf.FloorToInt((statRoll - 10)/2); 
    return result; 
} 

Dies ist die Version, die (zurückkehrt funktioniert -1 in einem Fall von statRoll = 9):

public int getBonus(int statRoll) 
{ 
    float initial = statRoll - 10; 
    float divided = initial/2; 
    int result = Mathf.FloorToInt(divided); 
    return result; 
} 
+0

Ihr einfaches Problem ist, dass in C#, für Float-Konstanten wie "7" und "2", müssen Sie schreiben ** 7f ** und ** 2f **. So einfach ist das – Fattie

Antwort

2

Sie erhalten Bit durch ganzzahlige Division. Sowohl statRoll als auch 10 sind int Typ, das macht initial eigentlich eine int.

Ihr erster Code entspricht

public int getBonus(int statRoll) 
{ 
    int initial = statRoll - 10; 
    int devisor = 2; 
    int divided = initial/devisor; 
    float castDevided = (float)divided 
    int result = Mathf.FloorToInt(castDevided); 
    return result; 
} 

Wenn Sie -1/2 tun haben Sie zwei Ints, wertet dies 0 nicht -0.5, weil das Ergebnis auch ein int sein muss. Die Art und Weise, dies zu beheben, ist einer der beiden Werte machen eine float

public int getBonus(int statRoll) 
{ 
    int result = Mathf.FloorToInt((statRoll - 10)/2f); //adding f after a number makes it a float 
    return result; 
} 

Dies macht die Trennung zwischen einem int und einem float, die in einem Schwimmer zur Folge hat. Der gleiche Code wäre