2014-11-09 4 views
0

Я передаю строковое значение из элемента управления ползунка, который должен быть в виде целого числа для обработки. В настоящее время, если я выберем значение 3, фактическое переданное значение строки будет 3.74.Как разобрать и округлить значение строки до ближайшего целого числа?

Я попытался решить эту проблему, взяв строку значения ползунка roundMax, преобразовывая ее в int и затем определяя ее значение целочисленной переменной флага roundMaxFlag.

int roundMaxFlag = Convert.ToInt64(Math.Round(Convert.ToDouble(roundMax))); 

Этот метод не работает, как я не могу implicitly convert type long to int.

Кто-нибудь знает, как я могу преобразовать значение строки из roundMax и сохранить его как целое int в roundMaxFlag?

Я предполагаю, что это можно сделать, используя приведенную выше строку кода, только что мне не хватает дополнительного лита?

value being passed over in roundMax

+1

Convert.ToInt32? –

+0

'Convert.ToInt64' возвращает' long', так как вы определили 'roundMaxFlag' как' int', между ними нет неявной беседы. –

+0

вы не говорите ... –

ответ

2

Вы можете использовать метод, называемый Convert.ToInt32, так как вы назначите свой результат на междунар (Int32), а не к длинному междунар (Int64).

Сообщение об ошибке, которое вы получаете, не может неявно преобразовывать тип long в int. выразить выше. Для представления int используется 32 бита. В то время как для представления длинного int используется 64 бита. Следовательно, вы не можете назначить переменную, которая ожидает 32-битное значение, 64-битное значение.

+0

Я узнаю что-то новое каждый день :) –

+0

@BrianJ все, что мы делаем :). Я рад, что помог. – Christos

0

Попробуйте Math.Ceiling

Он принимает число и округляет его вверх до ближайшего целого т.е.:

string mystr = "7.83" 
int roundMaxFlag = convert.ToInt64(mystr); // converting string to int 64 
roundMaxFlag = Math.Ceiling(roundMaxFlag)); // rounding value to next upward integer 

Надеется, что это помогает.

+0

Это не сработает. Вторая строка даст ту же ошибку, что и OP. –

0

Просто добавьте 0.5 и конвертируйте в int с помощью лита (int) и/или усечь, чтобы преобразовать в ближайшее целое число. (NB: для округления отрицательных чисел таким образом используйте -0.5)

+0

Я не согласен. Листинг, подобный '(int)' обрезает float, так, например, 3.74 становится 3. Добавление 0.5 устраняет эту проблему. Пример 1: 3,74 -> 4,24 -> 4. Пример 2: 3,24 -> 3,74 -> 3. – Roland

Смежные вопросы