C# 与区域设置相关的双重身份类型问题

C# 与区域设置相关的双重身份类型问题,c#,wcf,double,decimal,regional-settings,C#,Wcf,Double,Decimal,Regional Settings,在我的应用程序(WCF、REST、.NET)中,在一个对象请求中,我得到一个double类型的值。我需要这个方法来正确地实现小数部分为“,”和“.”的数字。如何在不使用字符串类型的情况下进行排列。例如:应将值“3,25”或“3.25”视为双精度的类型 示例代码: 这是一个在请求对象中使用的类 [DataContract] public class TripRatesMapped { [DataMember(IsRequired = true)] public double Tol

在我的应用程序(WCF、REST、.NET)中,在一个对象请求中,我得到一个double类型的值。我需要这个方法来正确地实现小数部分为“,”和“.”的数字。如何在不使用字符串类型的情况下进行排列。例如:应将值“3,25”或“3.25”视为双精度的类型

示例代码:

这是一个在请求对象中使用的类

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

}
这是请求对象的一部分

[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, “杂项1”:1.26, “杂项2”:1.27, “停车”:1.28, “通行费”:1.29 }

我需要,以便我可以在此表格中提出请求:

{ “ExtraGr”:1,25, “杂项1”:1,26, “杂项2”:1,27, “停车”:1,28, “通行费”:1,29 }


如果不使用类型字符串,这是否可行?

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

使用此重载:

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
,您可以通过依次尝试不同的文化来增强恢复力,直到您获得有效的双精度或用尽所有选项。这样做的主要缺点是,如果有人输入错误或您按错误的顺序检查区域性,您可能会得到错误的号码。如果有人输入“35500”,你首先检查法国文化,你会得到
35.5
而不是
35500.0

,但没有提供更多关于上下文(应用程序、编程语言、操作系统等)的详细信息,很难回答你的问题。你说的“对象请求”是什么意思?如果你在分析数字,那么它们必须是字符串,而不是双精度的?你能提供一些示例代码吗?我认为这个WCF服务不使用客户端的语言环境。相反,它接受来自不同地区的数据,并自动将它们绑定到double。所以应该有一个关于绑定的提示,使用不变文化或类似的东西。@antopalyok——这个理论仍然成立——如果OP想要接受来自不同文化的输入,他需要某种方式来指定它。