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";
var convertDecimal = Decimal.Parse(value , NumberStyles.AllowThousands
| NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);
var convertDecimal = Convert.ToDecimal(value);
var convertDecimal = Decimal.Parse(value,
NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
Wie kann ich eine string
mit 1200.00
in eine decimal
mit 1200.00
konvertieren?
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));
}
}
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.
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 ","
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?
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("----------------");
}
}
}
}
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);
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.
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
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);
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