2012-10-26 8 views

Répondre

0

Je vais poster le code qui a finalement fonctionné pour moi. Le contrôleur, sur la fonction OnActionExecuting:

ViewBag.CurrentNumberFormat = new System.Globalization.CultureInfo("en-US", false).NumberFormat; 
ViewBag.CurrentNumberFormat.NumberDecimalDigits = 2; 
ViewBag.CurrentNumberFormat.NumberDecimalSeparator = "~"; 
ViewBag.CurrentNumberFormat.NumberGroupSeparator = " "; 

et Vue:

@((1234567.435).ToString("#,###.##", ViewBag.CurrentNumberFormat)) 
+1

En quoi cela diffère-t-il de ce que j'ai posté ci-dessous :(Je suis content que vous l'ayez fait! – Tommy

+0

C'est différent parce que je n'ai pas besoin d'écrire 5 lignes de code au lieu d'une fois Votre message était en effet utile et inspirant, merci –

0
string.Format("{0:N2}", yourLovelyNumber); 
+0

ok, mais je veux être en mesure de spécifier par moi-même les séparateurs décimaux et des milliers, comment puis-je faire cela? –

4

Vous pouvez créer un DisplayTemplate qui traiterait comment de tels chiffres sont affichés dans votre point de vue:

/Views/Shared/DisplayTemplates/float.cshmtl:

@model float 
@string.Format("{0:N2}", Model); 

et vous pouvez l'appeler comme celui-ci de votre point de vue, si Amount était de type float:

@Html.DisplayFor(m => m.Amount) 
+0

Comment ce modèle est-il référencé? –

3

Pour contrôler le séparateur de milliers, vous devez appliquer vos modifications au NumberFormat pour la culture actuelle.

Si vous voulez que cela se produise indépendamment de la culture actuelle, vous pouvez simplement cloner la culture actuelle, appliquer votre NumberFormat modifié et le définir comme le courant.

Dans une application MVC vous généralement faire pendant Application_BeginRequest

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    newCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
    newCulture.NumberFormat.NumberGroupSeparator = "~"; 

    System.Threading.Thread.CurrentThread.CurrentCulture = newCulture; 
    System.Threading.Thread.CurrentThread.CurrentUICulture = newCulture; 
} 

Maintenant, vous pouvez utiliser la mise en forme « normale » des options de ToString() afin de mieux contrôler la mise en forme en fonction de vos besoins:

var a = 3000.5; 
var s = a.ToString('N:2') // 3~000.50 
s = a.ToString('N:4') // 3~000.5000 
+0

La mise à jour de System.Threading.Thread.CurrentThread.CurrentCulture ne fonctionnait pas car cela provoquait des erreurs supplémentaires. Je peux donner un exemple: quand j'essaye de convertir une chaîne dans le format par défaut ("14543.12" par exemple) dans Number, il va lancer une erreur. Ce qui a du sens. –

2

Vous devez spécifier un format numérique personnalisé afin de réaliser ce que vous recherchez. Here is the MSDN sur la création de fonctions de formatage de chaînes personnalisées.

Si vous avez vraiment besoin d'un séparateur de milliers personnalisé, créez votre propre variable NumberFormatInfo en affectant les valeurs souhaitées au séparateur de milliers (et au nombre décimal si nécessaire). Ensuite, appliquez le format personnalisé à votre numéro.

var numberFormatter = new CultureInfo("en-US", false).NumberFormat; 
numberFormat.NumberDecimalSeparator = ";"; 
numberFormat.NumberGroupSeparator = "-"; 
var myNumber = 1234567.89; 
var myFormattedNumber = myNumber.ToString("#,###.##", numberFormatter); 

//myFormattedNumber -> 1-234-567;89 

Quelques informations sur le NumberFormat class from the MSDN

1

variable.ToString ("n2") - Cela a fonctionné pour moi dans ASP.Net MVC Razor.

0

J'ai eu le même problème et peut recommander autoNumeric plug-in https://github.com/autoNumeric/autoNumeric

Inclure plugin:

<script src="~/Scripts/autoNumeric/autoNumeric.min.js" type="text/javascript"></script> 

Html:

<input type="text" id="DEMO" data-a-sign="" data-a-dec="," data-a-sep="." class="form-control"> 

Script:

<script> 
jQuery(function($) { 
$('#DEMO').autoNumeric('init'); 
}); 
</script> 

Vous pouvez taper seulement un nombre, si vous tapez 100000,99 vous verrez 100.000,99.

+0

A partir d'aujourd'hui, l'ancienne notation avec jQuery n'est plus supportée dans la version stable actuelle '4'. Cela ne fonctionnera pas. Utilisez simplement' new AutoNumeric ('# DEMO') 'et vous êtes prêt à partir! – Alex

Questions connexes