2013-09-24 6 views
6

Мне нужно знать, целое ли целое число или если оно имеет десятичные числа. Таким образом, 13 было бы целым числом, а 23.23 было бы десятичным.VB2010 Как определить, является ли число целым целым

So like;

If 13 is a whole number then 
msgbox("It's a whole number, with no decimals!") 
else 
msgbox("It has a decimal.") 
end if 
+0

Какой тип переменной, которая используется, чтобы содержать свой номер, это строка ?. –

ответ

7

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

If Math.Floor(value) = Math.Ceiling(value) Then 
... 
Else 
... 
End If 
4

Судя по тому, что у вас есть один тип, который вы нуждающихся, чтобы определить, является ли это целое число или другой тип Я предполагаю, что число содержится в строке. Если это так, вы можете использовать метод Integer.TryParse, чтобы определить, является ли это значение целым, оно также выводит его как целое, если оно выполнено успешно. Если это не то, что вы делаете, уточните свой вопрос с дополнительной информацией.

Dim number As String = 34.68 
Dim output As Integer 
If (Integer.TryParse(number, output)) Then 
    MsgBox("is an integer") 
Else 
    MsgBox("is not an integer") 
End If 

Edit:

Вы можете использовать ту же самую идею, если вы используете Decimal или другого типа, чтобы содержать свой номер, н что-то вроде этого.

Option Strict On 
Module Module1 

    Sub Main() 

     Dim number As Decimal = 34 
     If IsInteger(number) Then 
      MsgBox("is an integer") 
     Else 
      MsgBox("is not an integer") 
     End If 
     If IsInteger("34.62") Then 
      MsgBox("is an integer") 
     Else 
      MsgBox("is not an integer") 
     End If 

    End Sub 

    Public Function IsInteger(value As Object) As Boolean 
     Dim output As Integer ' I am not using this by intent it is needed by the TryParse Method 
     If (Integer.TryParse(value.ToString(), output)) Then 
      Return True 
     Else 
      Return False 
     End If 
    End Function 
End Module 
+0

Извините, я обновил исходное сообщение. Вход всегда будет целым числом, но мне нужно выяснить, является ли оно целым числом или целое число имеет десятичные числа. – user2691270

+2

@ user2691270 [Integer] (http://www.techterms.com/definition/integer) не может иметь десятичную точку, если имеет десятичную точку, это либо десятичная, либо двойная, либо строковая, либо одиночная или что-то в этом направлении. Где генерируется этот номер, если текстовое поле - это, вероятно, строка. –

+2

@MarkHall: вам не нужна переменная «помощник» для TryParse, если вас не интересует результат. Вы можете либо передать константу (например, 0, -1, 42, либо что угодно), либо «ничего» (что по умолчанию равно 0 для целого числа). В качестве побочного элемента: поскольку в ОП указано только «целое число», я бы предложил использовать BigInteger.TryParse. – igrimpe

17
If x = Int(x) Then 
    'x is an Integer!' 
Else 
    'x is not an Integer!' 
End If 
+0

Сладкий и простой. – Wakka02

+0

Что происходит, когда x является строкой? то есть «2», «2,2», «3,14»? Или еще лучше, что происходит, когда x превышает 2,1 миллиарда? Целые числа (например, идентификаторы таблиц) могут превышать максимальное значение, которое вы можете сохранить в Int (@ 2,1 миллиарда). – user3541092

+0

Я принял строгую типизацию. Вы получите исключение переполнения, если число слишком велико для переменной. – SSS

0
 
Dim Num As String = "54.54" 
If Num.Contains(".") Then MsgBox("Decimal") 
'Do Something 
+2

Некоторая разработка и объяснение улучшат качество этого ответа. –

+0

Этот ответ является единственным, который проверяет правильность форматирования числа (как строки). Остальные ответы равны 1 - 1.00, и это неправильно. –

1

Я предполагаю, что ваше начальное значение является строкой.

, Сначала проверьте, является ли строковое значение числовым.
, Сравните пол и потолок номера. Если это то же самое, у вас есть целое число.

Я предпочитаю использовать методы расширения.

''' <summary> 
''' Is Numeric 
''' </summary> 
''' <param name="p_string"></param> 
''' <returns></returns> 
''' <remarks></remarks> 
<Extension()> 
Public Function IsNumeric(ByVal p_string As String) As Boolean 
    If Decimal.TryParse(p_string, Nothing) Then Return True 
    Return False 
End Function 

''' <summary> 
''' Is Integer 
''' </summary> 
''' <param name="p_stringValue"></param> 
''' <returns></returns> 
<Extension()> 
Public Function IsInteger(p_stringValue As String) As Boolean 
    If Not IsNumeric(p_stringValue) Then Return False 
    If Math.Floor(CDec(p_stringValue)) = Math.Ceiling(CDec(p_stringValue)) Then Return True 
    Return False 
End Function 

Пример:

Dim _myStringValue As String = "200" 
    If _myStringValue.IsInteger Then 
     'Is an integer 
    Else 
     'Not an integer 
    End If 
Смежные вопросы