【问题标题】:How to convert session to double in C# Net?如何在 C# Net 中将会话转换为双精度?
【发布时间】:2014-06-03 18:12:02
【问题描述】:

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

Session["preprandial"] = txtFasting.Text;

然后,在第二种形式中,我需要将其转换为双精度;

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

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

【问题讨论】:

    标签: c# asp.net string double type-conversion


    【解决方案1】:

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

    所以我建议你使用TryParse,指定NumberStyles,IFormatProvider,这取决于你的需要,例如:

      double r;
      double.TryParse(Session["preprandial"].ToString(), NumberStyles.Any, CultureInfo.CurrentCulture, out r);
    

    您还应该检查 Session 中的对象是否不是。

    通常我使用next Extension方法进行双重转换:

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

    【讨论】:

    • 我应该使用哪种数字样式而不是 Any?里面有很多数字样式。
    • 我通常使用 Any,但那是枚举,你可能想使用其他东西,这取决于你的需要。
    • 我定义了一个字符串并将其分配给 12,1。然后我尝试了 TryParse,它工作并转换为 12.1。因此,您的第二个代码可能会起作用。
    猜你喜欢
    • 2012-12-04
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    相关资源
    最近更新 更多