2013-03-27 15 views
7

Dies ist wahrscheinlich dumm, aber es macht mir eine harte Zeit. Ich muss ein double zu string mit einem obligatorischen Dezimalpunkt umwandeln/formatieren.Double to String mit obligatorischem Dezimalpunkt

1   => 1.0 
0.2423423 => 0.2423423 
0.1  => 0.1 
1234  => 1234.0 

Grundsätzlich mag ich alle Dezimalstellen ausgegeben, sondern auch die gerundeten Werte stellen Sie sicher, die redundanten .0 zu haben. Ich bin mir sicher, dass es einen einfachen Weg gibt, dies zu erreichen.

+0

['.ToString (" N1 ");'] (http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx) – Romoku

+0

Ich bin nicht Als Antwort jetzt als Antwort, da ich nicht in der Lage bin, dies zu testen, aber kann nicht mit "0. #" ' – Sayse

+0

formatieren Danke, aber nicht ganz richtig. Probieren Sie '(1.234) .ToString (" f ")'. Es scheint auf genau zwei Dezimalstellen zu runden. – wpfwannabe

Antwort

4

Es gibt keine integrierte Methode zum Anfügen eines obligatorischen .0 an das Ende ganzer Zahlen mit der Methode .ToString(), da die vorhandenen Formate basierend auf der von Ihnen angegebenen Anzahl von Dezimalstellen abgeschnitten oder abgerundet werden.

Mein Vorschlag ist nur Methode, um Ihre eigene Implementierung mit einer Erweiterung rollen

public static String ToDecmialString(this double source) 
{ 
    if ((source % 1) == 0) 
     return source.ToString("f1"); 
    else 
     return source.ToString(); 

} 

Und die Nutzung:

double d1 = 1; 
double d2 = 0.2423423; 
double d3 = 0.1; 
double d4 = 1234; 
Console.WriteLine(d1.ToDecimalString()); 
Console.WriteLine(d2.ToDecimalString()); 
Console.WriteLine(d3.ToDecimalString()); 
Console.WriteLine(d4.ToDecimalString()); 

Ergebnisse in dieser Ausgabe:

1.0 
0.2423423 
0.1 
1234.0 
+0

Obwohl ich eine eigene Lösung verwendet habe, mag ich diese Antwort für absolute Einfachheit. Danke an alle! – wpfwannabe

7

Verwendung double.ToString("N1"):

double d1 = 1d; 
double d2 = 0.2423423d; 
double d3 = 0.1d; 
double d4 = 1234d; 
Console.WriteLine(d1.ToString("N1")); 
Console.WriteLine(d2.ToString("N1")); 
Console.WriteLine(d3.ToString("N1")); 
Console.WriteLine(d4.ToString("N1")); 

Demo

Standard Numeric Format Strings

The Numeric ("N") Format Specifier

aktualisieren

(1.234) .ToString („N1“) produziert 1.2 und zusätzlich zu weiteren Dezimalstellen zu entfernen, es fügt auch Tausender

Nun Separator, vielleicht müssen Sie ein benutzerdefiniertes NumberFormatInfo Objekt implementieren, die möglich ergeben sich aus der aktuellen CultureInfo und Verwendung in double.ToString:

var culture = CultureInfo.CurrentCulture; 
var customNfi = (NumberFormatInfo)culture.NumberFormat.Clone(); 
customNfi.NumberDecimalDigits = 1; 
customNfi.NumberGroupSeparator = ""; 
Console.WriteLine(d1.ToString(customNfi)); 

Beachten Sie, dass Sie benötigen, um es zu klonen, da es nur lesbar standardmäßig ist.

Demo

+0

+1 für die Antwort zurück und lassen Sie mich über Ideone.com wissen :) – floAr

+2

'(1.234) .ToString ("N1") 'erzeugt' 1.2' – wpfwannabe

+2

Zusätzlich zum Entfernen zusätzlicher Dezimalstellen wird ein Tausendertrennzeichen hinzugefügt, das im Beispiel des OP nicht enthalten ist. – CodesInChaos

-1

Sie bespannen gegossen und dann Appen“0,0" , wenn kein Dezimalpunkt gegeben

string sValue=doubleValue.ToString(); 
if(!sValue.Contains('.')) 
    sValue+=".0"; 

EDIT war: '' Wie in den Kommentaren erwähnt möglicherweise nicht der Dezimaltrenner in der aktuellen Kultur. Unter this article finden Sie den tatsächlichen Separator, wenn Sie Ihren Code für diesen Fall speichern möchten.

+0

Dieser Bereich ist bei Gebietsschemas mit anderen Dezimalstellen als "." Unterbrochen. Es ist auch ziemlich hässlich. – CodesInChaos

0

Double stellt eine Methode ToString() zur Verfügung, in der Sie ein IFormatProvider -Objekt übergeben können, das angibt, wie Sie Ihre double konvertieren möchten.

Darüber hinaus sollte es nachlaufende 0 um jeden Preis anzeigen.

value = 16034.125E21; 
// Display value using the invariant culture. 
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture)); 
// Display value using the en-GB culture. 
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB"))); 
// Display value using the de-DE culture. 
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE"))); 
// This example displays the following output to the console: 
//  -16325.62015 
//  -16325.62015 
//  -16325,62015 
//  1.6034125E+25 
//  1.6034125E+25 
//  1,6034125E+25 

Here ist die Dokumentation von MSDN.

3

Sie könnten so etwas tun: Wenn die Zahl keine Dezimalpunkte hat, können Sie ihre Ausgabe formatieren, um eine Dezimalstelle 0 zu erzwingen, und wenn sie Dezimalstellen hat, verwenden Sie einfach ToString();

double a1 = 1; 
double a2 = 0.2423423; 
string result = string.Empty; 
if(a1 - Math.Floor(a1) >0.0) 
     result = a1.ToString();  
else 
     result = a1.ToString("F1"); 

if (a2 - Math.Floor(a2) > 0.0) 
     result = a2.ToString(); 
else 
     result = a2.ToString("F1"); 

Wenn Sie "F" als Formatierung verwenden, wird der Ausgang nicht Tausendertrennzeichen und die Zahl enthalten, die folgt, um die Anzahl der Dezimalstellen angibt.

+0

Verdammt, ich weiß, ich könnte verschiedene Tricks machen. Ich hatte gehofft, dass ich etwas übersehen habe, was offensichtlich ist wie 1.234.ToString ("etwas hier"). – wpfwannabe