C# 字符串在C中以两位小数浮起#

C# 字符串在C中以两位小数浮起#,c#,floating-point,decimal,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;

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

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

如果需要小数位数,正确的方法是返回一个
小数
float
没有小数位。

这就是我如何编码
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}$");
}

正如约翰指出的,如果在示例数据中有“..”和“”,那么您可以考虑使用“代码>十进制.PARSE(value,CultualFix.xxx < /Cult>)与所允许的区域性。

您得到了“..”和“”的混合。在您的示例数据中。是否希望两者都被视为小数点?从根本上说,这是一个非常混乱的函数,有时返回值的1/100。此外,如果您对小数位数感兴趣,几乎可以肯定,您应该在所有位置使用
十进制
,而不是
浮点
。我假设
/100
是用于pport internationalization-
“99,09”
->9909->99.09。我很确定输入
“99”
会失败。如果输入是
1000.5
?这是转换代码,验证字符串是
IsDecimal
的任务。无论如何,创建一个检查它的regexp很容易。