J'ai un problème intéressant, j'ai besoin de convertir un entier en décimal.

Donc par exemple donné:

int number = 2423;
decimal convertedNumber = Int2Dec(number,2);
// decimal should equal 24.23

decimal convertedNumber2 = Int2Dec(number,3);
// decimal should equal 2.423

J'ai joué, et cette fonction fonctionne, je déteste juste que je doive créer une chaîne et la convertir en decimal, cela ne semble pas très efficace:

decimal IntToDecConverter(int number, int precision)
{
   decimal percisionNumber = Convert.ToDecimal("1".PadRight(precision+1,'0'));
   return Convert.ToDecimal(number / percisionNumber);
}
3
Mike Jones 23 mai 2018 à 17:10

5 réponses

Meilleure réponse

Puisque vous essayez de réduire le nombre, vous ne pouvez pas simplement diviser par 10 (1 décimale), 100 (2 décimales), 1000 (3 décimales), etc.

Vous avez déjà remarqué le modèle? En augmentant les chiffres à droite de la décimale, nous augmentons également la valeur initiale divisée (10 pour 1 chiffre après la décimale, 100 pour 2 chiffres après la décimale, etc.) de dix fois.

Ainsi, le motif signifie que nous avons affaire à une puissance de 10 (Math.Pow(10, x)).

Étant donné une entrée (nombre de décimales), effectuez la conversion en fonction de cela.

Exemple:

int x = 1956;
int powBy=3;

decimal d = x/(decimal)Math.Pow(10.00, powBy);
//from 1956 to 1.956 based on powBy

Cela étant dit, enveloppez-le dans une fonction:

decimal IntToDec(int x, int powBy)
 {
  return x/(decimal)Math.Pow(10.00, powBy);
 }

Appelez-le ainsi:

decimal d = IntToDec(1956, 3);

Aller dans la direction opposée

Vous pouvez également faire le contraire si quelqu'un a déclaré vouloir prendre une décimale comme 19,56 et la convertir en int. Vous utiliseriez toujours le mécanisme Pow mais au lieu de diviser, vous multiplieriez.

double d=19.56;
int powBy=2;
double n = d*Math.Pow(10, powBy);
10
JonH 30 janv. 2019 à 21:15

Number / percisionNumber vous donnera un entier que vous convertissez ensuite en décimal.

Essayer...

return Convert.ToDecimal(number) / percisionNumber;
0
CrisisWhatCrisis 23 mai 2018 à 14:16

Déplacer le point décimal comme ça n'est qu'une fonction de multiplication / division par une puissance de 10.

Donc, cette fonction fonctionnerait:

decimal IntToDecConverter(int number, int precision)
{
    // -1 flips the number so its a fraction; same as dividing below
    decimal factor = (decimal)Math.Pow(10, -1*precision)
    return number * factor;
}
1
BradleyDotNET 23 mai 2018 à 14:15

Vous pouvez essayer de créer decimal explicitement avec constructeur qui a été spécialement conçu pour cela:

public static decimal IntToDecConverter(int number, int precision) {
  return new decimal(Math.Abs(number), 0, 0, number < 0, (byte)precision);
}

Par exemple.

Console.WriteLine(IntToDecConverter(2423, 2));
Console.WriteLine(IntToDecConverter(1956, 3));

Résultat:

24.23
1.956
7
JonH 23 mai 2018 à 14:43

Convertissez votre méthode comme ci-dessous

public static decimal IntToDecConverter(int number, int precision)
{
   return = number / ((decimal)(Math.Pow(10, precision)));
}

Vérifiez le violon en direct ici.

0
user1672994 23 mai 2018 à 14:17