与区域设置相关的双精度类型问题

本文关键字:双精度 类型 问题 区域 设置 | 更新日期: 2023-09-27 18:30:55

在我的应用程序(WCF,REST,.NET)的对象请求中,我得到了一个双精度类型的值。我需要此方法在带有小数部分","和"."的数字上正确实现。如何在不诉诸字符串类型的情况下安排它。例如:值"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; }
}

这是请求对象的一部分

{ "额外Gr":1.25 , "杂项1":1.26 , "杂项2":1.27, "停车":1.28, "通行费":1.29 }

我需要这样我才能以这种形式提出请求:

{ "额外Gr":1,25, "杂项1":1,26, "杂项2":1,27, "停车场":1,28, "通行费":1,29 }

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

与区域设置相关的双精度类型问题

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

使用此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