Ich habe eine Klasse, die Werte enthält, die manchmal Geldwerte sind (wie 1,25, 2,50, 10,00 usw.), aber auch die Zeichenfolge "N/A"; so werden sie als String deklariert:Wie kann ich eine mathematische Berechnung für reelle Zahlen durchführen, die als Strings gespeichert sind?
public class PriceVarianceDataExtended
{
public String ShortName { get; set; }
public String ItemCode { get; set; }
public String Description { get; set; }
public string Week1PriceCraftworks { get; set; }
public string Week2PriceCraftworks { get; set; }
public string VarianceCraftworks { get; set; }
public string Week1PriceChophouse { get; set; }
public string Week2PriceChophouse { get; set; }
public string VarianceChophouse { get; set; }
public string Week1PriceGordonBiersch { get; set; }
public string Week2PriceGordonBiersch { get; set; }
public string VarianceGordonBiersch { get; set; }
public string Week1PriceOldChicago { get; set; }
public string Week2PriceOldChicago { get; set; }
public string VarianceOldChicago { get; set; }
public string Week1PriceOldChiFranchise { get; set; }
public string Week2PriceOldChiFranchise { get; set; }
public string VarianceOldChiFranchise { get; set; }
public string Week1PriceRockBottom { get; set; }
public string Week2PriceRockBottom { get; set; }
public string VarianceRockBottom { get; set; }
}
jedoch dieser Code bedeutete den monetären Wert zu speichern (als String), wo der Sinn macht, und ansonsten die val auf "N/A":
private string NOT_APPLICABLE = "N/A";
. . .
if (pvde.Week1PriceCraftworks != NOT_APPLICABLE &&
pvde.Week2PriceCraftworks != NOT_APPLICABLE)
{
pvde.VarianceCraftworks =
Convert.ToDecimal(pvde.Week2PriceCraftworks) -
Convert.ToDecimal(pvde.Week1PriceCraftworks).ToString();
}
else
{
pvde.VarianceCraftworks = NOT_APPLICABLE;
}
... ausfällt, sagt mir, "Operator '-' nicht auf die Operanden vom Typ 'dezimal' und 'string' angewendet werden kann" kompilieren
Also das ist meine Logik:
Wenn der "if" -Block eingegeben wird, bedeutet das, dass Week1PriceCraftworks und Week2PriceCraftworks numerische Werte wie Strings wie "5.00" und "3.14"
enthalten. Ich konvertiere dann "5.00" zu 5 und "3.14" zu 3.14 Verwenden der Convert.ToDecimal() -Aufrufe. Dies sollte einen Wert von 1,86 ergeben, der dann in eine Zeichenfolge ("1,86") umgewandelt wird, so dass der richtige Datentyp pvde.VarianceCraftworks zugewiesen wird.
Aber vernünftig und unkompliziert, wie mir scheint, bekomme ich das irr msg. Was ist falsch an meinem Ansatz?
BTW, die „week1“ und „week2“ Werte werden durch den Aufruf einer Methode, die auf diese Weise endet:
return price ?? NOT_APPLICABLE;
... so was in Week1PriceCraftworks enthalten ist und Week2PriceCraftworks sind entweder reale Werte (gespeichert als Zeichenfolgen) oder "N/A".
Versuchen Sie '()': '(Convert.ToDecimal (pvde.Week2PriceCraftworks) - Convert.ToDecimal (pvde.Week1PriceCraftworks))' .ToString(); – AlexD
Warum verwenden Sie nicht einfach NULL-Werte? –
@AlexD: Das hat funktioniert; mach es eine Antwort, wenn du willst. –