Преобразовать десятичную строку в int - PullRequest
27 голосов
/ 12 февраля 2011

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

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

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

Ответы [ 4 ]

52 голосов
/ 12 февраля 2011

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

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));
11 голосов
/ 12 февраля 2011

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

        string value = "246246.246";
        Convert.ToInt64(Convert.ToDouble(value));
1 голос
/ 12 февраля 2011

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

(long)Math.Round(decimal.Parse(value));
0 голосов
/ 15 апреля 2016

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

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;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...