2016-04-08 2 views
0

Voici le document de référence du script pour Mathf.FloorToInt Comme vous pouvez le voir, il devrait arrondir de -0,5 à -1. Pour une raison quelconque, il semble le retourner à 0 lorsqu'il est utilisé avec mes calculs.unity C# Mathf.FloorToInt (-0.5) renvoie 0 (agit comme Mathf.CielToInt)

J'ai deux versions des mêmes fonctions qui fonctionnent de manière très similaire mais qui donnent des sorties différentes. Mon code ne soumettra jamais que des entiers entre 3 et 18 à ces fonctions.

Cette version agit comme si elle était utilise Mathf.CielToInt (0 rendements en cas de statRoll = 9):

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

Ceci est la version qui fonctionne (retourne -1 en cas de statRoll = 9):

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

votre problème est simple en C#, pour des constantes flottantes comme "7" et "2", vous devez écrire ** 7F ** et ** 2f **. c'est si simple – Fattie

Répondre

2

Vous obtenez bit par division entière. Les deux statRoll et 10 sont de type int, ce qui fait initial en fait un int.

Votre premier code est équivalent à

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

Quand vous faites -1/2 vous avez deux ints, ce évalue à 0 pas -0.5 parce que le résultat doit aussi être un int. La façon de résoudre ce problème est de faire l'une des deux valeurs a float

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

Cela rend la division entre un int et un float qui se traduit par un flotteur. Le code similaire serait

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