2012-04-24 6 views
2

J'ai un gridview tirant d'une table SQL et il contient des chiffres en dollars variables. Ils sont en milliers, en millions ou en milliards. J'utilise actuellement {0: c0} mais je m'intéresse à maigrir pour ne montrer que trois chiffres significatifs.Comment arrondir des devises dans gridview à des chiffres significatifs?

Par exemple, j'aimerais que 3 411 216 512,07 $ affiche 3,41 G $; tandis que 1 066 555,54 $ serait affiché à 1,07 million de dollars.

Existe-t-il un moyen simple de faire cela dans ASP.NET ou ai-je besoin de sortir le jQuery? Ou alternativement, devrais-je le faire dans C# OnRowDataBound?

+0

Pouvez-vous modifier les données dans la source de données avant de les lier au gridview? – Servy

+0

Je peux. La question devient alors, est-il préférable de le faire en SQL en utilisant l'approche de Surreal Dreams et en ajoutant une autre colonne pour chaque valeur ou est-il préférable de le faire en C# en utilisant les deux autres réponses? En fin de compte, nous ne parlons que de quelques centaines de lignes (la plupart sont cachées à l'utilisateur jusqu'à ce que demandé), donc je doute que je verrais un problème de performance. – ScottieB

Répondre

0

Vous pouvez convertir le nombre en une chaîne, saisir les quatre premiers caractères - en supposant un nombre pur sans unités, virgules, etc - le convertir en un nombre, arrondir, puis compter la longueur de l'original chaîne pour décider où mettre le point décimal et quoi étiqueter avec, que ce soit B, M, K, etc. Je suggérerais de le faire côté serveur, je ne vois pas l'intérêt de le faire dans le navigateur à moins vous voulez le rendre interactif en quelque sorte.

0

Je le ferais dans OnRowDataBound. Vérifiez si votre numéro est supérieur à un milliard, divisez-le par un milliard, formez un "B" à la fin de celui-ci et retournez le symbole monétaire sur le recto. Vérifiez si le nombre est supérieur à un million ... etc

Vous pourriez probablement écrire un algorithme pour le gérer dynamiquement, mais comme c'est de l'argent et il est probablement limité à des billions de le faire manuellement devrait être beaucoup plus rapide.

0
if(n>999999) 
    { 
    string number = Convert.ToString(n.slice[0,3]) + "M"; 
    ... 
//> (apply it to your datatable and then show it (in datagridview if that's 
//> what you're using) 
    } 
    else if (n>...) 

répéter que pour les cas où il est sur une Bilion, etc, mais il y a encore la nécessité de vérifier où la virgule va être. Je ne suis pas sûr de savoir comment le faire. C'est ainsi que vous pouvez obtenir les 3 premiers chiffres comme vous le souhaitez et appliquer "B" ou "M".

Questions connexes