2009-03-11 8 views
1

Je suis en train d'écrire un numéro « intelligent » fonction de formatage, qui se comporteraient de cette façon:nombre intelligent formatage dans .net

1500 -> 1.5k 
1517 -> 1 517 
1234000 -> 1 234k 
1200000 -> 1.2M 

Est-il possible de le faire en utilisant double.toString() ou un autre .net intégré dans la classe?

Je sais que c'est assez facile à coder, mais je préfère réutiliser les classes de structure si la fonctionnalité existe déjà.

Répondre

2

Je ne crois pas qu'il existe quelque chose comme ça dans .NET. Voici la partie clé d'un script PowerShell que je dois faire pour moi.

$prefixes = @('', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y') 
$base = 1024; 

$magnitude = [Math]::Floor([Math]::Log($_, 1024)) 

Write-Verbose "`$magnitude = $magnitude" 

if($magnitude -eq 0) 
{ 
    [string]$mantissa = $_ 
    [string]$label = 'B'; 
} 
else 
{ 
    [string]$mantissa = [String]::Format("{0:N}", $_/[Math]::Pow(1024, $magnitude)) 

    Write-Verbose "`$mantissa = $mantissa" 

    [string]$label = $prefixes[$magnitude] 

    if ($IEC) 
    { 
     $label += "i" 
    } 

    $label += $unit 
} 


[String]::Format("{0} {1}", $mantissa, $label) 

Il doit être mis à jour pour utiliser les fonctions avancées de PowerShell V2. (Les parties que je n'ai pas collées sont les parties qui essaient de faire ce que font les fonctions avancées, et c'est en désordre.)

0

Les bibliothèques .NET ne ressemblent pas du tout à ce que vous cherchez, mais en utilisant Extension Methods vous pourriez leur ajouter cette fonctionnalité. Notez que vous ne pouvez pas remplacer les méthodes utilisant des extensions, mais en ajouter de nouvelles.

Cependant, architecturalement, je ferais mieux d'étendre les classes dont vous avez besoin en utilisant polymorphism et override les méthodes ToSting. Cela évite la surcharge des méthodes d'extension, mais vous permet quand même de faire circuler votre classe personnalisée vers des méthodes qui attendent un type de numéro .NET.

+0

Eh bien, je pense que je préfère utiliser une méthode d'aide chaque fois que j'ai besoin de formater mes nombres. Dans mon cas, ce n'est pas souvent suffisant pour justifier l'extension du double type ... – Brann