2014-04-19 39 views
0

我有兩種不同的形式,我創建會話以在表單之間傳遞值。在第一種形式我有文本框和輸入是十進制值;如何在C#Net中將會話轉換爲雙精度?

Session["preprandial"] = txtFasting.Text; 

然後,在第二種形式中,我需要將它轉換爲double;

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

當我使用此代碼時,十進制數字不能正確表示。例如;如果該值等於126.5,則轉換後將爲1265.0。所以,我試圖使用一些解析函數,但我無法做到。我怎樣才能把它轉換成雙倍?

回答

2

你必須與文化問題,比如你用逗號作爲分隔符,你的程序需要點(反之亦然):

所以我建議你使用TryParse,指定NumberStyles,的IFormatProvider,這取決於你的需求,例如:

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

此外,你應該檢查Session中的對象是不是。

平時我用下延法雙轉換:

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

我應該使用哪個號碼的風格,而不是任何?有很多數字樣式。 –

+0

我通常使用任何,但這是枚舉,你可能想使用別的東西,這取決於你的需要。 – Uriil

+0

我定義了一個字符串並將其分配給12,1。然後我嘗試TryParse,它工作並轉換爲12.1。所以,你的第二個代碼可能會工作。 –