要在C#中带两个小数位的浮点字符串

时间:2010-11-23 07:21:19

标签: c# floating-point decimal

这是将字符串转换为带有两位小数的浮点数的正确方法吗?

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

3 个答案:

答案 0 :(得分:2)

如果你想要小数位,正确的方法是返回decimalfloat 没有小数位。

答案 1 :(得分: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}$");
}

答案 2 :(得分:0)

约翰指出,如果你有“。”和“,”在您的示例数据中,您可以考虑将decimal.Parse(value, CultureInfo.xxx与允许的文化一起使用。