Строка для плавания с двумя десятичными знаками в C # - PullRequest
1 голос
/ 23 ноября 2010

Это правильный способ преобразования строки в число с плавающей запятой с двумя десятичными знаками?

    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 ]

2 голосов
/ 23 ноября 2010

Если вам нужны десятичные разряды, правильный способ - вернуть decimal. A float не имеет десятичных знаков.

0 голосов
/ 23 ноября 2010

Как указал Джон, если у вас есть "."и "," в данных образца, тогда вы можете рассмотреть возможность использования decimal.Parse(value, CultureInfo.xxx с разрешенными культурами.

0 голосов
/ 23 ноября 2010

Вот как я бы кодировал 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);
}

EDIT

Я добавил метод проверки.

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