2010-11-23 21 views
1

將字符串轉換爲浮點數並保留兩位小數位的方法是否正確?字符串在C中以兩位小數位浮動#

string s1 = "9.09"; 
    string s2= "99,09"; 
    string s3= ",09"; 

    ConvertToFloat(s1); 
    ConvertToFloat(s2); 
    ConvertToFloat(s3); 

    private float ConvertToFloat(string value) 
    { 
     float result; 
     decimal de= Convert.ToDecimal(value); 
     bool IsDecimalFormat = IsDecimal(de); 
     if (IsDecimalFormat) 
     { 
      result =Convert.ToSingle(value); 
     } 
     else 
     { 
      result = Convert.ToSingle(value)/100; 
     } 
     return result; 
     } 
    } 

    private bool IsDecimal(decimal myDec) 
    { 
     return (Decimal.Ceiling(myDec) > myDec) ? true : false; 
    } 
+2

你已經混合了「。」和「,」在您的示例數據。你希望兩者都被當作小數點嗎?基本上這是一個非常混亂的功能,有時會返回價值的1/100。另外,如果你對小數位感興趣,你應該幾乎可以肯定地使用`decimal`而不是`float`。 – 2010-11-23 07:24:30

+0

我假設`/ 100`是爲了支持國際化 - `「99,09」` - > 9909 - > 99.09。我很確定它輸入「99」時失敗。 – Kobi 2010-11-23 07:35:26

回答

2

如果你想要小數位,正確的方法是返回一個decimal。 A float不是有小數位數

0

這是如何我的代碼ConvertToFloat

private float ConvertToFloat(string value) { 
    if (!Validate(value)) 
     throw new ArgumentException (value); 

    string[] v = value.Split(new char[] {'.', ','}); 
    int integer = 0; 
    if (!string.IsNullOrEmpty(v[0])) { 
     integer = Convert.ToInt32(v[0]); 
    } 
    int dec = Convert.ToInt32(v[1]); 
    return integer + (dec/100.0f); 
} 

編輯

我增加了驗證方法。

public static bool Validate(string a) 
{ 
    return Regex.IsMatch(a, @"^\d*[\.,]\d{2}$"); 
} 
0

正如約翰指出的,如果你有「。」和「,」在你的樣本數據中,那麼你可以考慮使用decimal.Parse(value, CultureInfo.xxx與允許的文化。