2013-09-24 30 views
6

Devo essere in grado di dire se un numero intero è un numero intero o se ha numeri decimali. Quindi 13 sarebbe un numero intero e 23.23 sarebbe un decimale.VB2010 Come capire se un numero è un intero intero

Così simile;

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

Che tipo è la variabile che si sta utilizzando per contenere il tuo numero, si tratta di una stringa di ?. –

risposta

7

È possibile verificare se il pavimento e il soffitto del numero sono uguali o meno. Se è uguale, allora è un intero intero, altrimenti sarà diverso.

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

A giudicare dal fatto che si dispone di un tipo che si ha bisogno per determinare se sia o non è un numero intero o un altro tipo Io parto dal presupposto che il numero è contenuto in una stringa. In tal caso, è possibile utilizzare il metodo Integer.TryParse per determinare se il valore è un numero intero, ma lo stamperà anche come numero intero se ha esito positivo. Se questo non è quello che stai facendo, aggiorna la tua domanda con ulteriori informazioni.

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:

È possibile utilizzare la stessa idea, se si utilizza un decimale o un altro tipo di contenere il proprio numero, n qualcosa di simile.

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

Siamo spiacenti, ho aggiornato il post originale. L'input sarà sempre un numero intero, ma ho bisogno di scoprire se è un numero intero o se il numero intero ha decimali. – user2691270

+2

@ user2691270 un [Intero] (http://www.techterms.com/definition/integer) non può avere un punto decimale, se ha un punto decimale è un decimale, doppio, stringa o singolo o qualcosa lungo quelle linee. Da dove viene generato questo numero, se una casella di testo è probabilmente una stringa. –

+2

@MarkHall: Non hai bisogno della variabile "helper" per TryParse se non sei interessato al risultato. È possibile passare una costante (come 0, -1, 42 o qualsiasi altra cosa) o "nulla" (che per default è 0 per un intero). Come nota a margine: poiché l'OP specificava solo "numero intero", suggerirei di utilizzare BigInteger.TryParse. – igrimpe

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

Dolce e semplice. – Wakka02

+0

Cosa succede quando x è una stringa? Ad esempio "2", "2.2", "3.14"? O ancora meglio ancora, cosa succede quando x è più grande di 2,1 miliardi? Numeri interi (ad esempio ID tabella) possono eccedere il valore massimo che è possibile memorizzare in un Int (@ 2,1 miliardi). – user3541092

+0

Ho assunto una tipizzazione rigorosa. Otterrai un'eccezione di overflow se il numero è troppo grande per la variabile. – SSS

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

Alcune elaborazioni e spiegazioni migliorerebbero la qualità di questa risposta. –

+0

Questa risposta è l'unica che controlla se il numero (come una stringa) è formattato correttamente. Le altre risposte equivalgono a 1 a 1,00 e questo è sbagliato. –

1

sto supponendo che il valore iniziale è una stringa.

, Prima verifica se il valore di stringa è numerico.
, confrontare il pavimento e il soffitto del numero. Se è lo stesso, hai un numero intero.

Preferisco utilizzare i metodi di estensione.

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

Esempio:

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