2013-09-24 18 views
6

Muszę być w stanie stwierdzić, czy liczba całkowita jest liczbą całkowitą lub jeśli ma dziesiętne. Tak więc 13 byłoby liczbą całkowitą, a 23,23 byłoby liczbą dziesiętną.VB2010 Jak sprawdzić, czy liczba jest liczbą całkowitą

Tak jak;

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

Jakiego typu jest zmienna, że ​​używasz zawierać numer, jest to ciąg ?. –

Odpowiedz

7

Możesz sprawdzić, czy podłoga i sufit są takie same czy nie. Jeśli jest równa, to jest to cała liczba całkowita, inaczej będzie inna.

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

Sądząc po tym, że masz jeden typ, który jesteś konieczności ustalenia, czy nie jest to całkowita lub inny typ jestem przy założeniu, że liczba zawarta jest w ciąg. Jeśli tak, możesz użyć metody Integer.TryParse, aby określić, czy wartość jest liczbą całkowitą, ale także ją wypisze jako liczbę całkowitą, jeśli zakończy się pomyślnie. Jeśli to nie jest to, co robisz, zaktualizuj pytanie, aby uzyskać więcej informacji.

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:

Można użyć tego samego pojęcia, czy używasz dziesiętnych lub inny rodzaj zawierać numer, n coś takiego.

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

Przepraszamy, zaktualizowałem oryginalny wpis. Dane wejściowe zawsze będą liczbami całkowitymi, ale muszę się dowiedzieć, czy jest to liczba całkowita, czy też liczba całkowita ma jakiekolwiek miejsca dziesiętne. – user2691270

+2

@ user2691270 [Integer] (http://www.techterms.com/definition/integer) nie może mieć kropki dziesiętnej, jeśli ma kropkę dziesiętną, jest to przecinek dziesiętny, podwójny, ciąg lub pojedynczy lub coś wzdłuż tych linii. Gdzie jest generowany ten numer, jeśli Textbox jest prawdopodobnie ciągiem znaków. –

+2

@MarkHall: Nie potrzebujesz zmiennej "helper" dla TryParse, jeśli nie jesteś zainteresowany wynikiem. Możesz albo przekazać stałą (jak 0, -1, 42 lub cokolwiek) lub "nic" (która domyślnie wynosi 0 dla liczby całkowitej). Jako sidenote: Ponieważ PO tylko określona "liczba całkowita", proponuję użyć BigInteger.TryParse. – igrimpe

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

Słodkie i proste. – Wakka02

+0

Co się dzieje, gdy x jest ciągiem znaków? tj. "2", "2.2", "3.14"? A jeszcze lepiej, co się dzieje, gdy x jest większe niż 2,1 miliarda? Liczby całkowite (tj. Identyfikatory tabel) mogą i przekraczają maksymalną wartość, którą można przechowywać w Int (@ 2,1 miliarda). – user3541092

+0

Zakładałem ścisłe pisanie. Otrzymasz wyjątek przepełnienia, jeśli liczba jest zbyt duża dla zmiennej. – SSS

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

Niektóre opracowania i objaśnienia poprawiłyby jakość tej odpowiedzi. –

+0

Ta odpowiedź jest jedyną, która sprawdza, czy liczba (jako ciąg) jest poprawnie sformatowana. Pozostałe odpowiedzi wynoszą od 1 do 1,00, a to jest złe. –

1

jestem przy założeniu, że wartość początkowa jest ciągiem.

, Najpierw sprawdź, czy wartość ciągu jest liczbowa.
, Porównaj podłogę i sufit numeru. Jeśli jest taka sama, masz całą liczbę.

Wolę używać metod rozszerzających.

''' <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 

Przykład:

Dim _myStringValue As String = "200" 
    If _myStringValue.IsInteger Then 
     'Is an integer 
    Else 
     'Not an integer 
    End If