System.Convert.ToInt против (целое)

Я заметил в другом посте, что кто-то сделал что-то вроде:

double d = 3.1415;
int i = Convert.ToInt32(Math.Floor(d));

Почему они использовали функцию преобразования, а не:

double d = 3.1415;
int i = (int)d;

который имеет неявный пол и преобразование.

Кроме того, что более важно, я заметил в некотором производственном коде, который читал:

double d = 3.1415;
float f = Convert.ToSingle(d);

Это то же самое, что:

float f = (float)d;

Являются ли все эти неявные преобразования только в классе Convert для полноты, или они служат какой-то цели? Я могу понять потребность в .ToString (), но не в остальном.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
7 515
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать Convert, если у вас есть строка, которую вы хотите преобразовать в int

int i = Convert.ToInt32("1234");

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

то есть это все равно вызовет исключение, оно не вернет 0:

Convert.ToInt32("1234NonNumber");

Во многих случаях преобразование и преобразование будут иметь один и тот же результат, но преобразование часто легче читать.

Не преобразует ли Int32.Parse (String): Int32 строку в int?

Anthony Mastrean 19.09.2008 22:18

Int32.Parse преобразует "числовую" строку в int и вызовет исключение, если преобразование завершится неудачно. Int32.TryParse вернет false, если преобразование завершится неудачно, а Convert.ToInt32 вернет 0, если преобразование завершится неудачно.

Rune Grimstad 29.10.2008 17:14
Ответ принят как подходящий

Преобразование в int - это неявное усечение, а не неявное перекрытие пола:

double d = -3.14;
int i = (int)d;
// i == -3

Я выбираю Math.Floor или Math.Round, чтобы сделать мои намерения более ясными.

Convert.ToInt32 () используется для строк (http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx), в то время как приведение может использоваться только для типов, которые имеют внутренние преобразователи (числовые типы). Настоящая уловка заключается в выборе между Int32.Parse и Convert.ToInt32 (). Convert.ToInt32 () допускает нулевой параметр и возвращает 0, в то время как Int32.Parse () генерирует исключение ArgumentNullException.

Округление также обрабатывается по-другому:

x = -2,5 (целое) x = -2 Преобразовать в Int32 (x) = - 2
x = -1,5 (целое) x = -1 Преобразовать в Int32 (x) = - 2
x = -0,5 (целое) x = 0 Преобразовать в Int32 (x) = 0
x = 0,5 (int) x = 0 Преобразовать в Int32 (x) = 0
x = 1,5 (целое) x = 1 Преобразовать в Int32 (x) = 2
x = 2,5 (целое) x = 2 Преобразовать в Int32 (x) = 2

Обратите внимание на случаи x = -1,5 и x = 1,5. В некоторых алгоритмах метод округления имеет решающее значение для получения правильного ответа.

Другие вопросы по теме