2

オブジェクト要求のアプリケーション (WCF、REST、.NET) で、double 型の値を取得します。小数部分「、」および「。」を含む数値に対してこのメ​​ソッドを適切に実行する必要があります。紐の種類に頼らずアレンジする方法。例: 値 "3,25" または "3.25" は double の型と同じように扱われるべきです。

コード例:

これは、リクエスト オブジェクトで使用されるクラスです。

[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; }

}

これはリクエストオブジェクトの一部です

{ "ExtraGr":1.25 , "Misc1":1.26 , "Misc2":1.27, "Parking":1.28, "Tolls":1.29 }

このフォームでリクエストを行うことができるようにする必要があります。

{ "ExtraGr":1,25, "Misc1":1,26, "Misc2":1,27, "Parking":1,28, "Tolls":1,29 }

文字列型を使用せずにこれが可能かどうか?

4

1 に答える 1

1

クライアントのロケールを使用する場合は、クライアントが入力したものを、内部で使用できるdoubleに変換できるはずです。値を出力するときは、ロケールを再度使用する必要があります。

このTryParseオーバーロードを使用します。

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);

変数を省略するCultureInfoと、ローカルカルチャを使用してテキストが解析されます。

を含めるCultureInfoことで、有効なダブルを取得するか、オプションがなくなるまで、さまざまなカルチャを順番に試すことで、ある程度の回復力を構築できます。これの主な欠点は、誰かが入力ミスをしたり、間違った順序でカルチャをチェックしたりすると、間違った番号を取得する可能性があることです。誰かが「35,500」と入力し、最初にフランスの文化をチェックすると、35.5ではなく取得されます35500.0

于 2012-04-13T09:48:35.343 に答える