it-swarm.com.de

Konvertieren Sie die Zeichenfolge in eine Dezimalzahl, wobei Brüche erhalten bleiben

Ich versuche, 1200.00 in decimal umzuwandeln, aber Decimal.Parse() entfernt .00. Ich habe verschiedene Methoden ausprobiert, aber es entfernt immer .00, es sei denn, ich gebe einen anderen als 0 an.

string value = "1200.00";

Methode 1

 var convertDecimal = Decimal.Parse(value ,  NumberStyles.AllowThousands
       | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);

Methode 2

 var convertDecimal = Convert.ToDecimal(value);

Methode 3

var convertDecimal = Decimal.Parse(value,
       NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);

Wie kann ich eine string mit 1200.00 in eine decimal mit 1200.00 konvertieren?

56
NETQuestion

Hmm ... ich kann das nicht reproduzieren:

using System;

class Test
{
    static void Main()        
    {
        decimal d = decimal.Parse("1200.00");
        Console.WriteLine(d); // Prints 1200.00
    }
}

Sind Sie sicher, dass es sich nicht um einen anderen Teil Ihres Codes handelt, der den Dezimalwert später normalisiert?

Falls es sich um kulturelle Probleme handelt, probieren Sie diese Version, die nicht von Ihrem Gebietsschema abhängen sollte:

using System;
using System.Globalization;

class Test
{
    static void Main()        
    {
        decimal d = decimal.Parse("1200.00", CultureInfo.InvariantCulture);
        Console.WriteLine(d.ToString(CultureInfo.InvariantCulture));
    }
}
73
Jon Skeet

Ich denke, Ihr Problem ist die Anzeige der Dezimalzahl, nicht der Inhalt.

Wenn du es versuchst

string value = "1200.00";
decimal d = decimal.Parse(s);
string s = d.ToString();

s enthält die Zeichenfolge "1200".

Wenn Sie jedoch Ihren Code in dieses ändern

string value = "1200.00";
decimal d = decimal.Parse(s);
string s = d.ToString("0.00");

s enthält die Zeichenfolge "1200.00" wie gewünscht.

EDIT

Scheint, ich bin heute morgen früh am Morgen. Ich habe jetzt die Parse-Anweisungen hinzugefügt. Sogar mein erster Code gibt jedoch "1200.00" aus, selbst wenn ich erwartete, dass "1200" ausgegeben wird. Anscheinend lerne ich jeden Tag etwas und in diesem Fall offensichtlich etwas, das ziemlich grundlegend ist.

Also ignorieren Sie dies eine richtige Antwort. In diesem Fall werden wir wahrscheinlich mehr Code benötigen, um Ihr Problem zu identifizieren.

11

Hallo, ich hatte das gleiche Problem, aber es ist einfach, mach einfach Folgendes:

string cadena="96.23";

decimal NoDecimal=decimal.parse(cadena.replace(".",","))

Ich denke, das ist, weil die Notation, die C # auf Dezimalzahlen akzeptiert, mit einem ","

11
Adansetions

Der folgende Code gibt den Wert als 1200.00 aus. 

var convertDecimal = Convert.ToDecimal("1200.00");
Console.WriteLine(convertDecimal);

Sie sind sich nicht sicher, was Sie erwarten?

5
Ramesh

Hier ist eine Lösung, die ich mir ausgedacht habe. Dies kann als Befehlsaufforderungsprojekt ausgeführt werden. Sie müssen einige Sachen reinigen, wenn nicht. Hoffe das hilft. Es akzeptiert verschiedene Eingabeformate wie: 1.234.567,89 1.234.567.89 usw

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Globalization;
    using System.Linq;

    namespace ConvertStringDecimal
    {
        class Program
        {
            static void Main(string[] args)
            {
                while(true)
                {
                    // reads input number from keyboard
                    string input = Console.ReadLine();
                    double result = 0;
                    // remove empty spaces
                    input = input.Replace(" ", "");
                    // checks if the string is empty
                    if (string.IsNullOrEmpty(input) == false)
                    {
                        // check if input has , and . for thousands separator and decimal place
                        if (input.Contains(",") && input.Contains("."))
                        {
                            // find the decimal separator, might be , or .
                            int decimalpos = input.LastIndexOf(',') > input.LastIndexOf('.') ? input.LastIndexOf(',') : input.LastIndexOf('.');
                            // uses | as a temporary decimal separator
                            input = input.Substring(0, decimalpos) + "|" + input.Substring(decimalpos + 1);
                            // formats the output removing the , and . and replacing the temporary | with .
                            input = input.Replace(".", "").Replace(",", "").Replace("|", ".");
                        }
                        // replaces , with .
                        if (input.Contains(","))
                        {
                            input = input.Replace(',', '.');
                        }
                        // checks if the input number has thousands separator and no decimal places
                        if(input.Count(item => item == '.') > 1)
                        {
                            input = input.Replace(".", "");
                        }
                        // tries to convert input to double
                        if (double.TryParse(input, out result) == true)
                        {
                            result = Double.Parse(input, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
                        }
                    }
                    // outputs the result
                    Console.WriteLine(result.ToString());
                    Console.WriteLine("----------------");
                }
            }
        }
    }
2
Paulo Verissimo

Verwenden Sie dieses Beispiel

System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("en-GB",true);

decimal currency_usd = decimal.Parse(GetRateFromCbrf("usd"),culInfo);
decimal currency_eur = decimal.Parse(GetRateFromCbrf("eur"), culInfo);
2

dezimalstelle d = 3.00 ist immer noch 3. .. Ich denke, Sie möchten es einige auf dem Bildschirm anzeigen lassen oder in der Protokolldatei als 3.00 ..__ drucken

string str = d.ToString("F2");

wenn Sie die Datenbank zum Speichern der Dezimalzahl verwenden, können Sie den Preiswert in der Datenbank festlegen.

0
A.Learn

Der Wert ist derselbe, auch wenn die gedruckte Darstellung nicht Ihren Erwartungen entspricht:

decimal d = (decimal )1200.00;
Console.WriteLine(Decimal.Parse("1200") == d); //True
0
KingCode

Die Verwendung der CultureInfo-Klasse hat für mich funktioniert, ich hoffe, ich helfe Ihnen.

    string value = "1200.00";
    CultureInfo culture = new CultureInfo("en-US");
    decimal result = Convert.ToDecimal(value, culture);
0
Juan Carlos

Sie können versuchen, diese Methode in Ihrem Programm aufzurufen:

static double string_double(string s)
    {
        double temp = 0;
        double dtemp = 0;
        int b = 0;
        for (int i = 0; i < s.Length; i++)
        {
            if (s[i] == '.')
            {
                i++;
                while (i < s.Length)
                {
                    dtemp = (dtemp * 10) + (int)char.GetNumericValue(s[i]);
                    i++;
                    b++;
                }
                temp = temp + (dtemp * Math.Pow(10, -b));
                return temp;
            }
            else
            {
                temp = (temp * 10) + (int)char.GetNumericValue(s[i]);
            }
        }
        return -1; //if somehow failed
    }

Beispiel:

string s = "12.3";
double d = string_double (s);        //d = 12.3 
0
user7507137