2012-03-22 8 views
5

muszę sprawdzić czy zmienna mam to od typu danych double. To, co starałem:Sprawdzanie, czy zmienna jest typu danych podwójne

try 
{ 
    double price = Convert.ToDouble(txtPrice.Text); 
} 
catch (FormatException) 
{ 
    MessageBox.Show("Product price is not a valid price", "Product price error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    return false; 
} 

myślałem, że to będzie działać, ale oczywiście, nie udało mi się zrealizować, jeśli txtPrice.Text miał coś innego niż numer w nim klasa Convert po prostu analizować go.

Jak mogę sprawdzić, czy zmienna jest podwójna?

+0

"zmienna" jest niewłaściwym słowem. Próbujesz ustalić, czy tekst można przekonwertować na wartość zmiennoprzecinkową. Gdybyś określał typ zmiennej, użyłbyś zmiennej.GetType() == typeof (double) – Brannon

Odpowiedz

23

Użyj tego:

double price; 
bool isDouble = Double.TryParse(txtPrice.Text, out price); 
if(isDouble) { 
    // double here 
} 
+0

To lepiej, ale nadal przepuszcza, jeśli wprowadzę "qwerty" jako cenę. Łapie to, jeśli zostawiam to puste. –

+0

użyj wyniku bool zwrócony przez tryparse – ionden

3

użyć Double.TryParse method:

double price; 
if (Double.TryParse(txtPrice.Text, out price)) 
{ 
    Console.WriteLine(price); 
} 
else 
{ 
    Console.WriteLine("Not a double!"); 
} 
0

Można użyć

  • double.ParseExact lub
  • użyć wyrażenia regularnego, aby sprawdzić, czy jest on ważny.
0

Więc jeśli dobrze odpowiem na twoje pytanie, masz na myśli, że chcesz tylko zezwalać na liczby? Jeśli to prawda, to może ci to pomoże.

string Str = textBox1.Text.Trim(); 
double Num; 
bool isNum = double.TryParse(Str, out Num); 
if (isNum) 
MessageBox.Show(Num.ToString()); 
else 
MessageBox.Show("Invalid number"); 
0

Można użyć double.TryParse() powróci false jeśli nie może utworzyć podwójne.

0

nie można po prostu użyć:

double.Parse(txtPrice.Text); 

?

Dzięki temu będą Państwo FormatException mówiąc „ciąg wejściowy nie był w odpowiednim formacie.” jeśli wartość ciągu nie jest podwójna, co wydaje się mniej więcej tym, co robiłeś ręcznie.

1

Dlaczego nie spróbować czegoś takiego -

double doubleVar; 
    if(typeof(doubleVar) == double) { 
     printf("doubleVar is of type double!"); 
    } 

Można łatwo sprawdzić, czy zmienna jest typu podwójnego.

7

Jak w prosty sposób sprawdzić, czy zmienna jest podwójna?

Musisz być bardziej precyzyjny, próbując to zrobić, . Nie sądzę, że pytasz o to, o co pytasz, i warto być świadomym różnic w terminologii.

Jeśli masz zmienną, która jest oświadczył być typu double, to jest to zdecydowanie double.Jeśli masz zmienną, która jest zadeklarowana jako typu object, ValueType lub jeden z interfejsów, którego dotyczą, a następnie można użyć

if (value is double) 

Ale to brzmi jak co naprawdę chcesz wiedzieć, czy wartość ciągu to parsowana jako double. W tym celu powinieneś użyć double.TryParse - ale musisz także pomyśleć o kulturze, którą chcesz. Na przykład, czy uznasz "15,5" za ważny double? Europejscy użytkownicy mogliby, ale użytkownicy z USA prawdopodobnie nie. Czy chcesz zezwalać na separatory tysięcy?

Zdecydowanie radzę użyć przeciążenia, które ma wartość IFormatProvider i użyć odpowiedniej kultury. Nawet jeśli interesującą Cię kulturą jest , domyślnie jest to. Warto o tym powiedzieć.

Prawdopodobnie chcesz:

double result; 
// For suitable values of text, style and culture... 
bool valid = double.TryParse(text, style, culture, out result); 

Następnie użyć zmiennej valid celu ustalenia, czy nie było faktycznie analizowany poprawnie. Jeśli valid jest prawdziwe, wówczas wartość result jest analizowaną wartością. Jeśli valid jest fałszywe, result będzie 0.