2010-11-23 61 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与允许的文化。