9
votes

Formater des nombres volumineux avec .NET

J'ai une obligation de formater de grands nombres comme 4 316 000 comme "4,3 m".

Comment puis-je faire cela en C #?


7 commentaires

Euh, langage de programmation? Plate-forme? Aidez-nous ici. La réponse courte est la suivante: écrivez un certain code pour formater diverses gammes de valeurs de manière appropriée en fonction des exigences.


@JIM: C # est dans les balises pour la question. La question pourrait aider en faisant un peu plus évident.


Vous pouvez également ajouter l'argent de la balise ou la finance ... aiderait beaucoup de peeps :)


@John Gietzen: Microsoft embauche des trolls en tant que gestionnaires de programme?


@Musigenèse: Regard sur le logiciel de Microsoft, cela peut être la vérité :)


@Jim, tu as raison. Je laisse la balle tomber sur celui-là. J'ai appliqué de manière appropriée. @John, merci de me reposer en ligne.


Les gens peuvent regarder la réponse à une question ultérieure en double dans Stackoverflow.com/a/16091580/380384 pour un autre (IMHO plus complet) réponse.


5 Réponses :


1
votes

Divisez le numéro de 1000000.0, puis appendez un "M".

N'oubliez pas de contourner le nombre à 1 décimale.


2 commentaires

Cela fonctionne s'il essaie toujours de faire des millions, mais pas s'il veut des milliers, des millions, des milliards, etc.


La question posée sur les nombres comme 4 316 000 comme "4,3 m", d'autres formats n'étaient pas dans les exigences :)



22
votes

Vous pouvez utiliser log10 pour déterminer le bon Pause. Quelque chose comme ça pourrait fonctionner: xxx


1 commentaires

Je dois aimer l'approche de rasoir de l'Occam!



1
votes
long valueToFormat = 4316000;
var dict = new Dictionary<long, string>() {
    {1000000000, "b"},
    {1000000, "m"},
    {1000, "k"}
 };

 string formattedValue = valueToFormat.ToString();
 foreach (long n in dict.Keys.OrderBy(k => k)) {
     if (valueToFormat < n) {
         continue;
     }
     double value = Math.Round(valueToFormat / (double)n, 1);
     formattedValue = String.Format("{0}{1}", value, dict[n]);
 }
 Console.WriteLine(formattedValue);

0 commentaires

0
votes

Si vous utilisez uniquement des fenêtres, vous pouvez utiliser une déclaration P-Invoke dans C # ou VB.NET pour appeler les fonctions Win32 strformatbytesizew ou strformatbytesize64 . Si votre application / site est garantie d'exécuter au moins Vista SP1 ou Server 2008, il y a aussi strformatbytesizeex avec quelques options supplémentaires.

échantillon de la MSDN DOCS: P>

Numeric value   Text string 
532             532 bytes 
1340            1.30KB 
23506           22.9KB 
2400016         2.29MB 
2400000000      2.23GB 


2 commentaires

Cela ne ferait pas 4 316 000 comme "4,3 m", comme la question posée, mais plutôt "4.12 Mo"


Oups, lisez la question en ce qui concerne les diviseurs binaires, au lieu de diviseurs décimaux.



3
votes
3000 ==> 3k
3300 ==> 3,3k
3333 ==> 3,333k
30000 ==> 30k
300000 ==> 300k
3000000 ==> 3M
3000003 ==> 3M
0,253 ==> 253m
0,0253 ==> 25,3m
0,00253 ==> 2,53m
-0,253003 ==> -253,003m

1 commentaires

Bien que cela ne réponde pas à cette question particulière précisément, cela va bien plus loin et est très utile pour travailler avec métrique Préfixes . +10