2010-06-08 4 views
5

Ich habe eine Zeichenfolge, die 0,5 hält. Ich muss in 0,50 umrechnen.konvertieren 0,5 zu 0,50 in C#

ich versucht habe folgende Möglichkeiten, aber nichts works.Please

helfen

hdnSliderValue.Value 0,5 ist, möchte ich workFlow.QualityThresholdScore 0,50 in Funktion

workFlow.QualityThresholdScore = Convert.ToDecimal(String.format("{0:d}",hdnSliderValue.Value)); 

workFlow.QualityThresholdScore = Convert.ToDecimal(String.format("{0:0.00}",hdnSliderValue.Value)); 

Gibt es eine gebaut werden oder muss ich String-Handling durchführen, um dies zu erreichen.

+1

Und das Ziel 'workFlow.QualityThresholdScore' ist ein Dezimaltyp, richtig? Ihr Problem ist wahrscheinlich, wenn Sie _show_ das, nicht wenn Sie _assign_ es. –

Antwort

7

Der einfachste Weg, wahrscheinlich ist zu Zeichenfolge-Konvertierungen verwenden funktioniert: :(

obwohl

string text = "0.5"; 
decimal parsed = decimal.Parse(text); 
string reformatted = parsed.ToString("0.00"); 
decimal reparsed = decimal.Parse(reformatted); 

Console.WriteLine(reparsed); // Prints 0.50 

Das ziemlich hässlich Sie sicherlich könnte tun, indem Sie zuerst die ursprüngliche Zeichenfolge analysieren, dann messing um mit dem internen Format der Dezimalzahl - aber es wäre wesentlich schwieriger.

EDIT: Okay, falls es ein i18n Problem, hier ist eine Konsolenanwendung, die sollte definitiv Ausdruck 0.50:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     CultureInfo invariant = CultureInfo.InvariantCulture; 
     string text = "0.5"; 
     decimal parsed = decimal.Parse(text, invariant); 
     string reformatted = parsed.ToString("0.00", invariant); 
     decimal reparsed = decimal.Parse(reformatted, invariant); 

     Console.WriteLine(reparsed.ToString(invariant)); // Prints 0.50 
    } 
} 
+0

Sir, nach Ihrem Code mache ich das, dezimal geparst = dezimal.Parse (hdnSliderValue.Value); String reformatted = parsed.ToString ("0.00"); workFlow.QualityThresholdScore = dezimal.Parse (umformatiert); noch workFlow.QualityThresholdScore hält 0,5. Quick watch für Dezimal.Parse (neu formatiert) zeigt auch 0.5. Bitte sagen Sie, wie Sie dies beheben können. – Rohit

+0

@Rohit: Dies könnte nur der Debugger sein, der ein Problem verursacht. Was passiert, wenn Sie 'Console.WriteLine (workFlow.QualityThresholdScore)' 'verwenden? Der Code, den ich gezeigt habe, funktioniert ... Was ist der Code für die QualityThresholdScore-Eigenschaft? Wenn Sie ihm direkt 0,50m zuweisen, wie sieht das dann aus? –

+0

Ich habe versucht, Ihren Code in eine Konsolenanwendung einzufügen und druckt immer noch 0,5. Gibt es eine Globalisierung, die es ermöglicht, 0,5 zu drucken? – Rohit

1

Es ist ToString("N2").

Edit: In Test-Code zu zeigen, wie es

decimal a = 0.5m; 
Console.WriteLine(a); 
// prints out 0.5 
string s = a.ToString("N2"); 
decimal b = Convert.ToDecimal(s); 
// prints out 0.50 
Console.WriteLine(b); 
+0

ich glaube nicht, dass diese Methode hilft 0,5 zu 0,50 zu konvertieren –

+0

@Danny Chen: Funktioniert für mich, ich werde die Antwort mit dem Code ändern, die ich verwendet, um es zu testen. –

+0

@ ho1: Das fängt mit einer Dezimalzahl an - das OP beginnt mit einer Zeichenkette, entsprechend der Frage. Zugegeben, es ist nicht besonders klar - es könnte einfach schlecht beschrieben werden. –

0

In Numerik, 0,5 == 0,50. Eine Null fügt keine Informationen hinzu. Wenn also QualityThresholdScore vom numerischen Typ ist, erhalten Sie 0,5, egal was passiert. Wenn es sich um eine Zeichenfolge handelt, verwenden Sie decimal.ToString("0.00");.

+0

Nicht wahr: 'dezimal' verfolgt nachgestellte Nullen. –

+0

ist es nicht wichtig für den Wert, das war mein Punkt. – Femaref

+1

Woher wissen Sie, was der Anwendungsfall des OP als wichtig erachtet? Es mag aus irgendeinem Grund zwischen 0,5 und 0,50 unterscheiden; Schließlich ist diese Fähigkeit genau deshalb, weil Dezimal * nachlaufende Nullen verfolgt. –

0

Haben Sie versucht workFlow.QualityThresholdScore = Convert.ToDecimal (hdnSliderValue.Value.ToString ("N2"));

0

Stringy Version, da niemand es vorgeschlagen hat.

 string pointFive = "0.5"; 
     int decimals = (pointFive.Length-1) - pointFive.IndexOf('.'); 
     if (decimals >= pointFive.Length) 
     pointFive += ".00"; 
     else if (decimals == 1) 
     pointFive += "0"; 
     else if (decimals == 0) 
     pointFive += "00"; 

Vielleicht sogar schneller als numerische Konvertierungen und Formatierungsfunktionen.

Verwandte Themen