如何在C#Net中将会话转换为double?

如何在C#Net中将会话转换为double?,c#,asp.net,string,double,type-conversion,C#,Asp.net,String,Double,Type Conversion,我有两个不同的表单,我创建了会话来在表单之间传递值。在第一种形式中,我有文本框,输入的是十进制值 Session["preprandial"] = txtFasting.Text; 然后,在第二种形式中,我需要将其转换为double double preprandial = Convert.ToDouble(Session["preprandial"]); 当我使用此代码时,十进制数表示不正确。例如如果该值等于126.5,则转换后为1265.0。所以,我尝试使用一些解析函数,但我做不到。如何

我有两个不同的表单,我创建了会话来在表单之间传递值。在第一种形式中,我有文本框,输入的是十进制值

Session["preprandial"] = txtFasting.Text;
然后,在第二种形式中,我需要将其转换为double

double preprandial = Convert.ToDouble(Session["preprandial"]);

当我使用此代码时,十进制数表示不正确。例如如果该值等于126.5,则转换后为1265.0。所以,我尝试使用一些解析函数,但我做不到。如何将其转换为双精度?

您在区域性方面有问题,例如,您使用逗号作为分隔符,而您的程序需要点(反之亦然):

因此,我建议您根据需要使用
TryParse
,指定
numberstyle
,IFormatProvider,例如:

  double r;
  double.TryParse(Session["preprandial"].ToString(), NumberStyles.Any, CultureInfo.CurrentCulture, out r);
此外,您还应该检查会话中的对象是否不存在

通常我使用下一个扩展方法进行双重转换:

    public static double ToDouble(this object o)
    {
        double d;
        if (!Double.TryParse((o ?? "").ToString().Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture, out d))
            throw new FormatException(String.Format("Can't parse {0} to double", o));
        return d;
    }

我应该使用哪种数字样式而不是任何数字样式?其中有很多数字样式。我通常使用任意一种,但这是enum,根据需要,您可能需要使用其他样式。我定义了一个字符串并将其分配给12,1。然后我尝试了TryParse,它工作了,并转换为12.1。因此,您的第二个代码可能会工作。