Convert.ToInt или String.Split: что является более эффективным? - PullRequest
0 голосов
/ 24 марта 2010

Какой способ лучше удалить с плавающей запятой или есть более эффективный способ?

Округление не важно, мне интересно отображение числа

      Float number;            
      1- int wholeNumber= Convert.ToInt(number);
         string display=wholeNumber.ToString();

      2- string [] splitNumber= number.ToString().Split('.');
         string display=splitNumber[0];

Ответы [ 8 ]

5 голосов
/ 24 марта 2010

Вот два оприона, которые более эффективны:

Просто наберите номер вместо звонка Convert.ToInt32:

((int)number).ToString()

Отформатируйте число, используя спецификатор формата с нулевыми десятичными знаками:

number.ToString("N0")

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

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

5 голосов
/ 24 марта 2010

Поскольку вы просто отбрасываете десятичную дробь, выполните:

int wholeNumber = (int)number;

Это эффективно снизит десятичную дробь. Обратите внимание, что оно не будет округлять число, но это не то поведение, которое вы запрашивали.

4 голосов
/ 24 марта 2010

1 лучше, потому что описывает, что вы делаете. 2 перерыва в разных регионах.

2 голосов
/ 24 марта 2010

Использование number.ToString ("N0") - хлам. Пытаться оптимизировать его бессмысленно, что бы вы ни делали для отображения строки пользователю, это будет лот дороже.

2 голосов
/ 24 марта 2010

Я предполагаю, что под более эффективным вы подразумеваете "быстрее".

Вы пытались определить это самостоятельно? Я сомневаюсь, что вы получите окончательный ответ, если кто-то еще не пойдет и попробует его.

Установите цикл, выполняющий один и тот же процесс 1000 раз или около того (отрегулируйте число по своему усмотрению), а затем рассчитайте разницу.

2 голосов
/ 24 марта 2010
int i = (int)number;
string display = i.ToString();

Приведение к int автоматически отбрасывает любые десятичные знаки

1 голос
/ 24 марта 2010

Этот тест проходит, так что оба работают. Не уверен насчет эффективности, хотя. Как вы думаете, что читает лучше? Вызов Truncate более точен в отношении того, что вы делаете.

[Test]
public void Getting_whole_number()
{
   Assert.AreEqual("5", Math.Truncate(5.5).ToString());
   Assert.AreEqual("5", ((int)5.5).ToString());
}
1 голос
/ 24 марта 2010

Если это только для отображения, передайте правильную строку формата, и вам вообще не нужно конвертировать:

Float number;             
string display=number.ToString("F0"); 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...