2012-04-13 22 views
2

In meiner Anwendung (WCF, REST, .NET) in einer Objektanforderung bekomme ich einen Wert vom Typ double. Ich brauche diese Methode für Zahlen mit dem Dezimalteil "," und ".". Wie man es anordnet, ohne auf die Art der Schnur zurückgreifen zu müssen. Zum Beispiel: Die Werte "3,25" oder "3,25" sollten genauso behandelt werden wie die Art des Doppels.Probleme mit dem Typ des Doppelten im Zusammenhang mit regionalen Einstellungen

Beispielcode:

diese eine Klasse, die

in dem Anforderungsobjekt verwendet wird
[DataContract] 
public class TripRatesMapped 
{ 
    [DataMember(IsRequired = true)] 
    public double Tolls { get; set; } 

    [DataMember(IsRequired = true)] 
    public double Parking { get; set; } 

    [DataMember(IsRequired = true)] 
    public double ExtraGr { get; set; } 

    [DataMember(IsRequired = true)] 
    public double Misc1 { get; set; } 

    [DataMember(IsRequired = true)] 
    public double Misc2 { get; set; } 

} 

und dies ist Teil des Anforderungsobjekts

{ "ExtraGr": 1.25, "Misc1": 1,26, "Misc2": 1,27, "Parken": 1,28, "Maut": 1,29 }

ich brauche, damit ich eine Anfrage in dieser Form machen:

{ "ExtraGr": 1,25, "Misc1": 1,26, "MISC2": 1,27, „Parkplatz ": 1,28, " Maut ": 1,29 }

ob dies ohne die Verwendung von Typ String möglich ist?

+1

Ohne weitere Details über den Kontext (Anwendung, Programmiersprache, Betriebssystem usw.) zu geben, ist es schwierig, Ihre Frage zu beantworten. – assylias

+0

Was meinen Sie mit "Objektanfrage"? Und wenn Sie Zahlen analysieren, dann müssen sie Strings sein, nicht doppelt? Können Sie einen Beispielcode bereitstellen? –

Antwort

1

Wenn Sie das Gebietsschema des Clients verwenden, sollten Sie in der Lage sein, das, was sie eingeben, in ein Double zu konvertieren, das Sie intern verwenden können. Sie müssen das Gebietsschema erneut verwenden, wenn Sie den Wert drucken.

verwenden TryParse Überlastung:

string value = "3,25"; 
NumberStyles style = NumberStyles.Number; 
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); 
if (Double.TryParse(value, style, culture, out number)) 
    Console.WriteLine("Converted '{0}' to {1}.", value, number); 
else 
    Console.WriteLine("Unable to convert '{0}'.", value); 

Wenn Sie die CultureInfo Variable weglassen wird es die lokale Kultur, um den Text zu analysieren.

Durch die Aufnahme der CultureInfo können Sie eine gewisse Widerstandsfähigkeit aufbauen, indem Sie nacheinander verschiedene Kulturen ausprobieren, bis Sie entweder ein gültiges Double erhalten oder keine Optionen mehr haben. Der Hauptnachteil dabei ist, dass wenn jemand einen Tippfehler macht oder Sie die Kulturen in der falschen Reihenfolge überprüfen, könnten Sie die falsche Nummer bekommen. Wenn jemand "35.500" eingibt und Sie zuerst die französische Kultur überprüfen, erhalten Sie 35.5 statt 35500.0.

+1

Ich denke, dieser WCF-Dienst verwendet nicht das Gebietsschema des Clients. Im Gegenteil, es akzeptiert Daten von verschiedenen Locales und bindet sie automatisch doppelt. Es sollte also ein Hinweis auf die Verwendung einer invarianten Kultur oder Ähnliches geben. –

+0

@AntonPalyok - Die Theorie hält immer noch an - wenn das OP Eingaben von verschiedenen Kulturen akzeptieren will, braucht es eine Möglichkeit, es zu spezifizieren. – ChrisF