2010-01-11 9 views
6

Mam numery przechowywane w bazie danych, a niektóre mają zero jako pierwszą cyfrę, ponieważ zawsze muszą być pewną ilością cyfr. Mam pole tekstowe, które ma wpisany ten numer, więc robię Convert.ToInt32 (TextBox.Text), który usuwa początkowe zero, jeśli je posiada. Czy ktoś ma jakieś pomysły, jak mogę utrzymać zero, lub dodać go na początek po konwersji?Konwertuj.ToInt32 - Zachowaj poprzednie zero

+4

Jeśli chcesz mieć wiodące zero, na pewno nie chcesz konwertować na Int32? Dlaczego nie zachować tego jako ciąg? –

+0

Nie sądzę, że możesz je zachować. ale możesz sformatować przekonwertowane int, aby wyświetlić je ponownie: http://msdn.microsoft.com/en-us/library/dd260048.aspx –

+0

@Matt Ponieważ typem bazy danych jest Int – Grace

Odpowiedz

26

Jedynym sposobem zachowaj poprzednie zera, aby nie przekształcić go w liczbę.

Liczba nie ma żadnych poprzednich zer, ponieważ zawiera tylko wartość, a nie ciąg znaków reprezentujących wartość.

Jeśli chcesz przekonwertować go na liczbę, a następnie przekształcić go z powrotem do łańcucha, odtwarzając poprzedzające zera, można użyć formatu niestandardowego:

string formatted = number.ToString("00000"); 

Albo dla szeregu dynamicznego cyfr:

string formatted = number.ToString(new String('0', numberOfDigits)); 
+0

+1 za wyjaśnienie obu opcji, ponieważ najlepsze rozwiązanie zależy od charakteru danych (imo). – Thorarin

+2

Nie jest 'number.ToString(). PadLeft (numberOfDigits, '0')' łatwiejsze? Przynajmniej łatwiejsze do przeczytania powiedziałbym ... :) – Svish

+2

Martwię się wartościami ujemnymi podczas wykonywania dopełnienia w ten sposób. Przykład, twoja opcja PadLeft będzie wyglądała następująco: "00-9" zamiast -009. – Codesleuth

9

Jeśli chcesz zachować wyściełane zero, zachowaj wartość jako ciąg. Liczby całkowite nie mogą przechowywać informacji o wypełnionych zerach, ponieważ po prostu reprezentują liczbę.

Jeśli konieczne jest sprawdzenie wprowadzonego numeru, należy użyć wartości Int32.TryParse lub dopasować wartość do wartości regular expression (np. "^\d+$").

Edit: Oprócz Guffa's answer, można użyć "D" (MSDN) do formatu do określonej liczby znaków (z zerowym obicia, jeśli to konieczne):

string formatted = number.ToString("D5"); // 13 -> 00013 
+0

+1, aby uzyskać wskazówki dotyczące specyfikatora formatu dziesiętnego ("D"). Ponieważ pytanie określa 'Convert.ToInt32()', jest to moja osobista preferowana metoda wypełniania wartości. – Codesleuth

0

należy użyć formatu ciąg dla utrzymania wiodącej zerowy:

int fooValue = Convert.ToInt32(TextBox.Text) 
//operations with foo Value 
string formatValue = fooValue.ToString("#0000"); 
2

sposób Zrobiłbym to, gdy numer zostanie umieszczony w bazie danych, zamiast podawać go pod numer int, używając string, używając myint.ToString("0000000"). Z liczbą 0 to całkowita długość wyściełanej liczby.

0

To powinno również zadziałać.

123.ToString().PadLeft(5, '0'); // 0
+0

Jak skomentował komentarz Svisha, tworzyłoby to dziwne wyniki z ujemnymi liczbami całkowitymi. – Codesleuth

Powiązane problemy