2017-02-07 1 views
-3

Ich habe eine API, die einen Dezimalwert als Zeichenfolge erhalten.Dezimalstellen zu einem Dezimalwert hinzufügen

z: "1.96"

ich mit diesem Code, um diese Zeichenfolge-Wert am Parsen:

decimal.TryParse("1,96", out myDecimalVar) 

Aber ich brauche die folgende Dezimalwert: 1.96000

Wie kann ich es tun, ohne Math.Round? Denn Math.Round liefert 1.97000

Tks!

+5

Das * ist * der Dezimalwert, den Sie haben, versuchen Sie, dies als eine Zeichenfolge irgendwo anzuzeigen? – Sayse

+1

Was brauchen Sie? Dezimal oder Zeichenkette? –

+0

Wenn Sie nur ein Zeichenfolgenformat mit N Dezimalstellen wünschen, schauen Sie hier: http://StackOverflow.com/Questions/3059759/double-Tostring-with-n-Number-of-Decimal-Places –

Antwort

1

Im Gegensatz zu double und float, decimal ist ein BCD (Binär Dezimal), so können Sie einen Trick spielen:

// Be sure, that your current culture uses "," (comma) 
// as a decimal separator (e.g. Russian, ru-Ru culture) 
decimal.TryParse("1,96", out myDecimalVar); 

// add up a special form of zero 
myDecimalVar += 0.00000m; 

// 1,96000 
Console.Write(myDecimalVar); 

für Details, siehe bitte

https://msdn.microsoft.com/en-us/library/system.decimal(v=vs.110).aspx

der Binärdarstellung von einem Dezimalwert eines Zeichens 1-Bit besteht, eine 96-Bit-ganze Zahl und ein Skalierfaktor verwendet, um die 96-Bit-Integer zu teilen und Geben Sie an, welcher Teil davon ein Dezimalbruch ist. Der Skalierungsfaktor ist implizit die Nummer 10, zu einem Exponenten angehoben Bereich von 0 bis 28.

Also wir haben myDecimalVar in 196000ganze Zahl mit -5Skalierungsfaktor gedreht wird.

Eine natürliche Weise ist jedoch zu Parse wie es ist, und repräsentieren, wie Sie mit Hilfe von Formatierungs wollen:

decimal.TryParse("1,96", out myDecimalVar); 
... 
Console.Write(myDecimalVar.ToString("F5")); // 5 digits after the decimal point 
+0

NICEEEEE !!!!! Das ist es. –

0

Wenn Sie es als String benötigen dann:

`  string v = "1.96"; 
     decimal d; 
     decimal.TryParse(v, out d); 
     Console.Write(d.ToString("f4")); 
` 
+0

Ja, aber ich brauche eine dezimale Ausgabe. thnks –

0

Sie haben variieren Alternativen

decimal myDecimalVar; 
decimal.TryParse("1,96", out myDecimalVar); 
Console.WriteLine(myDecimalVar.ToString("0.00000")); // 1,96000 
Console.WriteLine(myDecimalVar.ToString("F5"));  // 1,96000 

als bereits beantwortet.

+0

Ja, aber ich brauche eine dezimale Ausgabe. thnks –

Verwandte Themen