2012-05-26 3 views
0

Я попытался сделать это - внесение любого значения float в значение int. То, что я пытался достичь, составляет 2,00-2,99 до 2.Как игнорировать Decimal

Примечание: Я не пытаюсь выполнить приближение (ниже 2.49 идет до 2, а те 2.50+ идут до 3).

Я делал это до сих пор

public int RemoveDecimal(float value) 
{ 
    string TempText = (string)value; 
    TempText.Remove(IndexOf('.')); 
    return int.parse(TempText); 
} 

Но это получит ошибку, когда значение с плавающей точкой заканчивается .00

Как я могу добиться этого?

Спасибо за любую помощь

+0

Как вы относитесь к отрицательным значениям? К '0', к' -inf', или они недействительны? – CodesInChaos

+1

Я не уверен, чего вы хотите достичь, но возможно, что 'decimal' соответствует вашим требованиям лучше, чем' float'/'double'. – CodesInChaos

ответ

5

Math.Floor функция вам нужно.

Он:

Возвращает наибольшее целое число меньше или равно заданному числу.

Пример:

var val = Math.Floor(value); 

Или, вы можете просто бросить в целое - это будет просто игнорировать десятичную часть, при условии, что диапазон decimal находится в пределах диапазона в int (в противном случае вы получите исключение):

int noDecimals = (int)value; 
+0

Или просто литье ... –

+0

Почему вы сначала конвертируете от float до десятичного? –

+0

@MrLister - Не заметил, что значение, переданное функции, начиналось с 'float'. Просто увидел строку сначала ... – Oded

-2

Просто введите число с плавающей точкой в ​​int делает то, что вы хотите.

i = (int)myFloat; 

Это усечение дробные числа, то есть она всегда идет в направлении 0.

(int)2 == 2 
(int)1.9 == 1 
(int)-1.5 == -1 

Это, очевидно, не работает правильно, если результат выходит за пределы допустимого диапазона int. Если вы хотите достичь того же, но с числом с плавающей запятой, как результат, Math.Truncate - это то, что вам нужно.

+1

Как я уже сказал в своем комментарии к Джону, приведение к 'int' не будет выполнено, если вход находится за пределами диапазона для' int'. –

+0

@MrLister OP имеет функцию 'float'->' int ', поэтому я предполагаю, что он хочет получить результат 'int'. Но я добавил что-то для плавающих точек тоже. – CodesInChaos

+0

ОП в тексте вопроса произнес «любое значение поплавка». Примерная функция была всего лишь примером, и она все равно не работала. –

0

вы не всегда можете преобразовать float к int, потому что большинство значений в float находятся вне range для int. вы должны вернуть строку.

следующий сделаю только это.

public string RemoveDecimal(float value) 
{ 
    string TempText = value.ToString("#"); 
    return TempText; 
}