2009-03-11 12 views
1

ich dabei bin eine ‚kluge‘ Zahlenformatierung Funktion zu schreiben, die sich so verhalten würde:Intelligente Zahlenformatierung in .net

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

Ist es möglich, dies zu tun mit double.toString() oder eine andere .net eingebaute Klasse?

Ich weiß, es ist ziemlich einfach zu programmieren, aber ich würde lieber die Framework-Klassen wiederverwenden, wenn die Funktionalität bereits existiert.

Antwort

2

Ich glaube nicht, dass es so etwas in .NET gibt. Hier ist der Schlüssel zu einem PowerShell-Skript, das ich für mich tun muss.

$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) 

Es muss aktualisiert werden, um die erweiterten Funktionen von PowerShell V2 zu verwenden. (Die Teile, die ich nicht eingefügt habe, sind die Teile, die versuchen, was Advanced Functions tun, und es ist chaotisch.)

0

Die .NET-Bibliotheken haben nichts, was Sie suchen, aber verwenden Extension Methods können Sie diese Funktionalität zu ihnen hinzufügen. Beachten Sie, dass Sie Methoden, die Erweiterungen verwenden, nicht überschreiben können, sondern nur neue hinzufügen.

Jedoch würde ich architektonisch besser sein, die Klassen zu erweitern, die polymorphism und override die ToSting-Methoden benötigen. Dies würde den Overhead der Erweiterungsmethoden vermeiden, aber Sie können Ihre benutzerdefinierte Klasse dennoch an Methoden weitergeben, die einen .NET-Nummertyp erwarten.

+0

Nun, ich denke, ich werde eher eine Hilfsmethode verwenden, wenn ich meine Zahlen formatieren muss. In meinem Fall reicht es nicht oft aus, den Doppeltyp zu erweitern ... – Brann

Verwandte Themen