Le résultat de toutes les équations de division dans le ci-dessous pour la boucle est de 0. Comment puis-je l'obtenir pour me donner une décimale, par exemple: code: p> using System;
namespace TestDivide
{
class Program
{
static void Main(string[] args)
{
int maximum = 300;
for (int i = 0; i <= maximum; i++)
{
float percentage = (i / (float)maximum) * 100f;
Console.WriteLine("on #{0}, {1:#}% finished.", i, percentage);
}
Console.ReadLine();
}
}
}
10 Réponses :
parce que
Essayez
i / 100.0
Cette réponse obtiendrait un uppote de moi s'il a également expliqué pourquoi i> cela fonctionnerait; o)
Le code des questions ne fonctionne pas car "/" - L'opérateur étant appelé avec des arguments entier de la division entier.S quels d'arguments est float ou double, puis "/" la division que vous attendez-vous. : 0)
parce que i code> est une
i / 100 code> effectue une division entière, alors le résultat est toujours 0, est casse à la Type de cible. Vous devez spécifier au moins un littéral non-INT dans votre expression:
i / 100.0
Vous utilisez INT / INT, qui fait tout entier arithmétique, même si vous attribuez une variable décimale / double / float.
force l'un des opérandes à être du type que vous souhaitez utiliser pour L'arithmétique. p> résultats: p> (etc) p> Notez que ce n'est pas em> montrant la valeur exacte représentée par le flotteur ou le double - vous ne peut pas em> représenter 0,01 exactement comme flotteur ou double, par exemple. Le formatage des chaînes arrondit efficacement le résultat. Voir mon Article sur le point binaire flottant .NET pour plus d'informations ainsi qu'une classe qui Va vous laisser voir la valeur exacte em> d'un double. p> Je n'ai pas dérangé en utilisant 100L pour résultat2 code> car le résultat serait toujours identique. p> p>
Parce que je suis un entier et 100 est un entier ... vous avez donc une division entière p>
essayer (décimal) i / 100.0 à la place p>
Peu importe où vous stockez, un entier divisé par un entier sera toujours un entier. P>
C'est la division entière quel que soit le type de variable que vous stockez, donc int / int = int p>
double result3 = ((double)i) / 100;
Vous devez forcer une opération de point flottant "double / double" au lieu d'un "int / int"
Dans mon cas, je n'avais que Vars et NO INT
float div = (var1 - var2) / float.Parse(var1.ToString());
Je sais que ce n'est pas le point de la question ... mais je pense que 297.0 / 315 est 0.942857142857143 plutôt que 0.30793650793650793650793650793651. :)
Dupliqué possible de C # arrondit les divisions en soi