Подтвердить что ты не робот

С# Преобразование String Decimal в Int

У меня есть строка "246246.246", которую я хотел бы передать интерфейсу IConvertable, ToInt16, ToInt32, ToIn64. Каков наилучший способ разобрать строку с десятичными знаками на целое число?

Это решение, но есть ли лучшее решение?

string value = "34690.42724";
Convert.ToInt64(Convert.ToDouble(value));
4b9b3361

Ответ 1

Чтобы сделать это округление округления, вы можете сделать:

Convert.ToInt64(Math.Floor(Convert.ToDouble(value)));

Если вам нужно округлить, вы можете заменить Math.Floor на Math.Round.

Изменить:. Поскольку вы отметили в комментарии, что вы будете округлять:

Convert.ToInt64(Math.Round(Convert.ToDouble(value)));

Если вам нужно беспокоиться о локализации/глобализации, тогда как @xls сказал, что вы должны применять CultureInfo в преобразованиях.

Изменить 2: Альтернативный метод с использованием строковой функции (не очень элегантный IMO - возможно, он может быть изящным с функцией предиката):

Convert.ToInt64(value.Substring(0, value.IndexOf('.') > 0 ? value.IndexOf('.') : value.Length));

Ответ 2

Вам не нужно округлять значение, так как ToInt64 (double) возвращает закругленную версию уже

        string value = "246246.246";
        Convert.ToInt64(Convert.ToDouble(value));

Ответ 3

Если вы действительно беспокоитесь о точности, но не о скорости, то десятичный тип будет лучше.

(long)Math.Round(decimal.Parse(value));

Ответ 4

Предполагая, что эта строка поступает из пользовательского ввода, вы, вероятно, захотите уловить стиль набора. Запустите его с помощью функции многократного использования так...

int? ConvertToNumber(string value)
{
   if (value == string.Empty) return null;

   try
   {
       var dec = decimal.Parse(value,
           NumberStyles.AllowDecimalPoint |
           NumberStyles.Number |
           NumberStyles.AllowThousands);

       return (int)Math.Round(dec);
   }
   catch (Exception ex)
   {
       Console.WriteLine("Please input a number.");
       return null;
   }
}