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,“停车”:1,28,“通行费”:1,29 }

不使用字符串类型是否可行?

4

1 回答 1

1

如果您使用客户端的语言环境,您应该能够将他们键入的内容转换为您可以在内部使用的双精度。打印值时,您需要再次使用区域设置。

使用这个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 回答